BM4-合并两个有序链表

题目要求

image

思路分析

对于链表类的题,其实大部分有一个万能的方法,就是遍历一次链表,将他们的节点放到数组中,将节点的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
}
posted @ 2022-12-26 22:17  含若飞  阅读(49)  评论(0编辑  收藏  举报