LeetCode21 合并两个有序链表
作者:互联网
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/
目录
解题思路
遍历
考虑四种情况
① l2比l1长
② l1比l2长
③ l1的值比l2的值大的情况
④ l2的值比l1大的情况
定义一个resultNode返回链表。还需要定义一个temp链表 指向头结点的尾部,进行尾插法。
代码
public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode a1 = l1;
ListNode a2 = l2;
ListNode resultNode = null;
ListNode temp = null;
while (a1 != null || a2 != null) {
if (a1 == null) {
if (resultNode == null) {
resultNode = temp = a2;
} else {
temp.next = a2;
temp = temp.next;
}
a2 = a2.next;
continue;
}
if (a2 == null) {
if (resultNode == null) {
resultNode = temp = a1;
} else {
temp.next = a1;
temp = temp.next;
}
a1 = a1.next;
continue;
}
if (a1.val > a2.val) {
if (resultNode == null) {
resultNode = temp = a2;
} else {
temp.next = a2;
temp = temp.next;
}
a2 = a2.next;
} else {
if (resultNode == null) {
resultNode = temp = a1;
} else {
temp.next = a1;
temp = temp.next;
}
a1 = a1.next;
}
}
return resultNode;
}
递归
再打一个TODO吧 现在还没有时间琢磨,等有空了补上来。这是照着答案写的,还不是很理解。
代码
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(l2.next, l1);
return l2;
}
}
标签:temp,next,链表,a2,l2,有序,l1,null,LeetCode21 来源: https://blog.csdn.net/weixin_41082315/article/details/119218125