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. 合并两个有序链表的主要内容,如果未能解决你的问题,请参考以下文章