leetcode_【21】合并两个有序链表

1.题目描述

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

2.解题思路

(1) 判断是否有空链表,如果有则直接返回另一个不为空有序链表

(2) 依次判断是否有对应链表大小,小的加入res链表,并移动

注:该题与剑指offer-[16]题一致,还可以用递归。

3.代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/**

* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null &&l2!=null)
return l2;
if(l2 == null && l1!=null)
return l1;
ListNode res = new ListNode(-1);
ListNode ans = res;
while(l1!=null&&l2!=null){
//哪个小添加哪个
if(l1.val>l2.val){
res.next = new ListNode(l2.val);
l2 = l2.next;
res = res.next;
}else{
res.next = new ListNode(l1.val);
l1 = l1.next;
res = res.next;
}
}
//将剩下的没便利完的加入
while(l1!=null){
res.next = new ListNode(l1.val);
l1 = l1.next;
res = res.next;
}
while(l2!=null){
res.next = new ListNode(l2.val);
l2 = l2.next;
res = res.next;
}
return ans.next;
}
}

4.提交记录

合并有序链表

文章目录
  1. 1. 1.题目描述
  2. 2. 2.解题思路
  3. 3. 3.代码
  4. 4. 4.提交记录
| 139.6k