【javascript算法题目21:合并两个有序链表】

92 阅读1分钟

本文讲述的是力扣算法中的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之初设置进去
   //返回的是两个有序链表结合后的内容。
};