剑指 Offer 25. 合并两个排序的链表(简单)

通过率 72.9%

题目链接

题目描述:

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

示例1:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

限制:

0 <= 链表长度 <= 1000

思路:

类似归并排序,设双指针分别指向l1和l2,根据节点值的大小来判断节点添加顺序,不过有个细节要注意(看官网精选题解):

  • 头节点的确定:一开始我只想到先判断l1和l2的头节点大小,从而将头节点小的那个作为res返回结果的头节点,也是看了Krahets大神的题解才知道还有引入伪头节点这个方法,这样就不用特判l1和l2的头节点了,最后返回res.next就行了,秒啊

另外,当l1或l2为空跳出合并循环时,可以直接用三元表达式判断将哪个添加到末尾,以节省代码量

 1 /*JavaScript*/
 2 /**
 3  * Definition for singly-linked list.
 4  * function ListNode(val) {
 5  *     this.val = val;
 6  *     this.next = null;
 7  * }
 8  */
 9 /**
10  * @param {ListNode} l1
11  * @param {ListNode} l2
12  * @return {ListNode}
13  */
14 var mergeTwoLists = function(l1, l2) {
15     const res = new ListNode(0)
16     let p = res
17     while(l1 && l2) {
18         if(l1.val <= l2.val) {
19             p.next = l1
20             l1 = l1.next
21         } else {
22             p.next = l2
23             l2 = l2.next
24         }
25         p = p.next
26     }
27     p.next = l1 ? l1 : l2
28     return res.next
29 };
原文地址:https://www.cnblogs.com/wwqzbl/p/15203676.html