力扣算法ing(29 / 100)
3.16 21.合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = []
输出:[]
示例 3:
输入:l1 = [], l2 = [0]
输出:[0]
我的思路:
双指针+新建链表
1 2 4
*
1 3 4
*
如果相等取第一个
1
1 < 2
1 1
2 < 3
1 1 2
3 < 4
1 1 2 3
4 = 4
1 1 2 3 4
while(l1!==null && l2 !== null)
我的代码:
解答错误
function mergeTwoLists(list1: ListNode | null, list2: ListNode | null): ListNode | null {
// 双指针
let l1 = list1;
let l2 = list2;
const newList = new ListNode;
let cur = newList;
while(l1!== null && l2 !== null){
if(l1.val === l2.val){
cur.next = l1;
l1 = l1.next;
}else if(l1.val < l2.val){
cur.next = l1;
l1 = l1.next;
}else if(l1.val > l2.val){
cur.next = l2;
l2 = l2.next;
}
cur = cur.next;
}
return newList;
};
莫名多出来了一个0,返回不应该只返回newList
我的代码:
function mergeTwoLists(list1: ListNode | null, list2: ListNode | null): ListNode | null {
// 双指针
let l1 = list1;
let l2 = list2;
const newList = new ListNode;
let cur = newList;
while(l1!== null && l2 !== null){
if(l1.val === l2.val){
cur.next = l1;
l1 = l1.next;
}else if(l1.val < l2.val){
cur.next = l1;
l1 = l1.next;
}else if(l1.val > l2.val){
cur.next = l2;
l2 = l2.next;
}
cur = cur.next;
}
return newList.next;
};
解答错误,只考虑了l1和l2是相同的长度,应该还要考虑剩余下来的
正确代码:
function mergeTwoLists(list1: ListNode | null, list2: ListNode | null): ListNode | null {
// 双指针
let l1 = list1;
let l2 = list2;
const newList = new ListNode;
let cur = newList;
while(l1!== null && l2 !== null){
if(l1.val === l2.val){
cur.next = l1;
l1 = l1.next;
}else if(l1.val < l2.val){
cur.next = l1;
l1 = l1.next;
}else if(l1.val > l2.val){
cur.next = l2;
l2 = l2.next;
}
cur = cur.next;
}
if(l1 != null){
cur.next = l1;
}else if(l2 != null){
cur.next = l2
}
return newList.next;
};