leetcode 合并两个有序链表 java
时间: 2023-04-03 12:03:44 浏览: 129
可以使用递归或迭代的方式来合并两个有序链表。以下是一个 Java 实现的例子:
```
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null) {
return l2;
}
if (l2 == null) {
return l1;
}
if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
}
```
其中,ListNode 是一个链表节点的定义,包含一个整数值 val 和一个指向下一个节点的指针 next。
相关问题
用java完成 leetcode 合并两个有序链表
可以使用Java编写代码来合并两个有序链表。以下是示例代码:
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null) {
return l2;
}
if (l2 == null) {
return l1;
}
if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
}
其中,ListNode 是链表节点的定义,val 表示节点的值,next 表示下一个节点的指针。这个函数的作用是将两个有序链表合并成一个有序链表,并返回合并后的链表头节点。
leetcode rust 合并两个有序链表
本题要求合并两个有序链表。对于链表中的每一个节点,由于链表是有序的,所以可以将两个链表中的节点按照大小顺序进行比较,然后逐个将较小的节点链接上去,最终得到一个新的有序链表。
使用Rust语言实现这个问题,需要首先定义一个链表节点的结构体,包含node值以及next指针。然后定义一个函数来合并两个有序链表,输入为两个链表的头节点指针,输出为新的有序链表的头节点指针。
在合并过程中,首先需要判断两个链表的头节点哪一个较小,将较小的节点作为新链表的头节点,并将该节点的next指针指向递归调用合并函数的结果。递归结束条件为其中一个链表为空,则将另一个链表直接链接到新链表上。
完整代码如下:
```rust
// 定义链表节点结构体
#[derive(Debug)]
struct ListNode {
val: i32,
next: Option<Box<ListNode>>,
}
impl ListNode {
fn new(val: i32) -> Self {
ListNode { val, next: None }
}
}
// 合并两个有序链表
fn merge_two_lists(l1: Option<Box<ListNode>>, l2: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
match (l1, l2) {
(None, None) => None, // 两个链表均为空
(l1, None) => l1, // 其中一个链表为空,直接返回另一个链表
(None, l2) => l2,
(Some(mut l1), Some(mut l2)) => {
if l1.val < l2.val {
l1.next = merge_two_lists(l1.next, Some(l2));
Some(l1)
} else {
l2.next = merge_two_lists(Some(l1), l2.next);
Some(l2)
}
}
}
}
// 测试代码
fn main() {
let l1 = Some(Box::new(ListNode {
val: 1,
next: Some(Box::new(ListNode {
val: 2,
next: Some(Box::new(ListNode {
val: 4,
next: None,
})),
})),
}));
let l2 = Some(Box::new(ListNode {
val: 1,
next: Some(Box::new(ListNode {
val: 3,
next: Some(Box::new(ListNode {
val: 4,
next: None,
})),
})),
}));
let merged = merge_two_lists(l1, l2);
println!("{:?}", merged);
}
```