21. 合并两个有序链表

Posted 沿着路走到底

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了21. 合并两个有序链表相关的知识,希望对你有一定的参考价值。

力扣

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]


示例 2:

输入:l1 = [], l2 = []
输出:[]


示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

解题思路

与归并排序中的合并两个有序数组很相似。

将数组替换成链表就能解此题。

解题步骤

新建一个新链表,作为返回结果。

用指针遍历两个有序链表,并比较两个链表的当前节点,较小者先接入新链表,并将指针后移一步。

链表遍历结束,返回新链表。

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) 
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * 
 */
/**
 * @param ListNode list1
 * @param ListNode list2
 * @return ListNode
 * 
解题思路
与归并排序中的合并两个有序数组很相似。
将数组替换成链表就能解此题。

解题步骤
新建一个新链表,作为返回结果。
用指针遍历两个有序链表,并比较两个链表的当前节点,较小者先接入新链表,并将指针后移一步。
链表遍历结束,返回新链表。
*/
var mergeTwoLists = function(list1, list2) 
  let res = new ListNode(0)
  let p1 = list1
  let p2 = list2
  let p = res

  while(p1 && p2) 
    if (p1.val < p2.val) 
      p.next = p1
      p1 = p1.next
     else 
      p.next = p2
      p2 = p2.next
    

    p = p.next
  

  // 连接 p1 后面剩余的一串
  if (p1) 
    p.next = p1
  

  if (p2) 
    p.next = p2
  

  return res.next
;

1

以上是关于21. 合并两个有序链表的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 21.合并两个有序链表

合并两个有序链表_21

21. 合并两个有序链表

21. 合并两个有序链表

21. 合并两个有序链表

力扣21.合并两个有序链表