0
点赞
收藏
分享

微信扫一扫

合并两个有序链表(js递归解法)问题

静守幸福 2022-04-21 阅读 59

一、问题发现

在力扣刷题时,官方递归解法中不知道哪一步会返回合成链表的表头(每一个链表表头都在遍历对应链表下一个节点):

二、问题解决

我对代码进行了测试:

求[1,4,5],[2,3,4,6]合并链表

在每次return前都输出当前return结果(再给输出结果加上标识1和2)

①未加标识结果:

②加标识结果:

解释:(console.log存在栈中,后进先出,即先执行最近的console.log语句)最后判断出随着链表表头不断向后面节点遍历,l1,l2指向改变,但是在第一次调用mergeTwoLists函数时,return l1保留了l1地址,指向链表1的头结点。

三、完整代码

function ListNode(val,next){
this.val = (val===undefined)?0:val;
this.next = (next===undefined)?null:next;
}

function linkList(arr){
let head = new ListNode(-1);
let list = head;
for(let i = 0;i<arr.length;i++){
list.next = new ListNode(arr[i]);
list = list.next;
}
return head.next;
}

function mergeTwoLists(l1,l2){
if(!l1) {
console.log(l1);
console.log(l2);
return l2;
}
if(!l2) {
console.log(l2);
return l1;
}
if(l1.val<l2.val){
l1.next = mergeTwoLists(l1.next,l2);
console.log('1'+l1);
return l1;
}else{
l2.next = mergeTwoLists(l1,l2.next);
console.log('2'+l2);
return l2;
}
}

console.log(mergeTwoLists(linkList([1,4,5]),linkList([2,3,4,6])));

举报

相关推荐

0 条评论