1:05

LeetCode Hot 100:合并两个有序链表

力扣第 21 题「合并两个有序链表」要求把两条非递减链表拼成一条新的非递减链表。示例 [1,2,4][1,3,4] 的结果是 [1,1,2,3,4,4];两条链表的节点数都可能为零。1 这道题收录在 LeetCode 热题 100 中。
关键是让 tail 永远指向结果链表末端。每轮比较 list1.vallist2.val,把较小节点接到 tail.next,再移动对应链表和 tail。循环结束后,剩余链表本身已有序,可以整体接上。
function mergeTwoLists(list1, list2) {
  const dummy = new ListNode(0);
  let tail = dummy;

while (list1 !== null && list2 !== null) {
    if (list1.val < list2.val) {
      tail.next = list1;
      list1 = list1.next;
    } else {
      tail.next = list2;
      list2 = list2.next;
    }

tail = tail.next;
  }

tail.next = list1 !== null ? list1 : list2;
  return dummy.next;
}
dummy 统一了结果链表为空和首次接入节点的处理,空链表不需要额外分支。两个输入节点各访问一次,时间复杂度是 O(m + n);只复用原节点并新增常数个指针,额外空间复杂度是 O(1)

This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.

Related content