本文讲述的是力扣算法中的21题:合并两个有序链表
解题思路简单明了,算是对链表操作的入门级题目,算法新手可以一起过来看看解题思路噢
详解代码及解析如下:
var mergeTwoLists = function(l1, l2) {
//传入两个有序链表l1,l2
let curr = new ListNode()
const dummy = curr// 设置dummy,并且后面·不需要用到,是因为留着dummy放在链表头,最后return 方便读取
while(l1!==null && l2!== null){
if(l1.val<l2.val){
curr.next = l1
l1 = l1.next
}
else{
//该情况包含了l1.val===l2.val的情况
curr.next = l2
l2 = l2.next
}
//这一步是个关键点,很明显,如果你curr的当前位置不往后移会导致curr的这个链表一直在设置第一个值。仅仅是头部的值在发生变化。
curr = curr.next
}
//以上情况只是针对两个有序链表都还没读到null的情况,下面是处理单独一个有序链表不为空的情况,但另外一个已经读到尽头的情况。
if(l1!==null){
curr.next = l1
}
if(l2!==null){
curr.next = l2
}
return dummy.next //显然dummy设置在curr链表头的作用就在这里,curr已经读不到链表头了,就需要dummy在function之初设置进去
//返回的是两个有序链表结合后的内容。
};