题目要求
思路分析
对于链表类的题,其实大部分有一个万能的方法,就是遍历一次链表,将他们的节点放到数组中,将节点的next置空,使用数组的各种方法去操作链表,之后再拼接链表。不过这种方法仅局限于刷题,只能做到把题过了,可以理解为一种“逃课”,我个人还是不建议的,不过能用这种方法解出来题也是一种进步
回到正题,新建一个头节点,之后使用一次遍历,将其中一个链表遍历为空即可。
对每次的节点数据进行两两比对,小的就添加,并且指针前进。
代码参考
var mergeTwoLists = function (list1, list2) {
// 创建的新链表的守卫节点
const prehead = new ListNode(-1)
// 让prev指针指向当前的节点,它的next即为返回链表的head
let prev = prehead
// 当list1和list2其中有一条为空时,就退出,将非空的那条添加在新链表之后
while (list1 != null && list2 != null) {
// 如果list1的值小于list2的值,那么则将list1节点添加,并将指针前进
if (list1.val <= list2.val) {
prev.next = list1
list1 = list1.next
} else {
prev.next = list2
list2 = list2.next
}
prev = prev.next
}
// 合并后 list1 和 list2 最多只有一个还未被合并完,我们直接将链表末尾指向未合并完的链表即可
prev.next = list1 === null ? list2 : list1
return prehead.next
}
return prehead.next
}
标签:遍历,BM4,list1,list2,链表,有序,节点,指针
From: https://www.cnblogs.com/zx529/p/17007062.html