[路飞]_合并两个有序链表

21. 合并两个有序链表

题目描述

将两个升序链表合并为一个新的 升序 链表并返回。

新链表是通过拼接给定的两个链表的所有节点组成的。

示例

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
复制代码

解题思路

  • 定义两个指针,分别指向 l1,l2
  • 当两个链表都存在值时:
    • 比较相应的值,谁小就将谁的值取出,并将其指针往后移动
  • 当一个链表遍历完成之后:
    • 将剩余的链表直接赋值到最后即可

代码

var mergeTwoLists = function (list1, list2) {
  // 保持 next 代码统一
  let fakeHead = new ListNode(0);
  let head = fakeHead;
  // 都存在比较值
  while (list1 && list2) {
    if (list1.val < list2.val) {
      head.next = list1;
      list1 = list1.next;
    } else {
      head.next = list2;
      list2 = list2.next;
    }
    // 链表指向下一位
    head = head.next;
  }
  if (list1) {
    head.next = list1;
  }
  if (list2) {
    head.next = list2;
  }
  return fakeHead.next;
};


复制代码

おすすめ

転載: juejin.im/post/7040748820845559822