- 题目描述
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000
- 分析
首先这里需要初始化一个伪结点Dum指向NewList
然后循环合并:当l1或l2为空则跳出while循环
1.当l1.val<l2.val时,此时NewList的后继节点指向为l1,l1往后遍历
2.当l1.val>=l2.val时,此时NewList的后继节点指向为l2,l2往后遍历
3.NewList前进,NewList = NewList.next
合并剩余的尾部节点。
返回值:此时返回的是伪结点之后的链表
(为什么不需要比较每次NewList指向的后面的节点和Dum中的节点的大小,是因为在比较l1.val和l2.val的时候,每次只是移了小的那个val所在的链表)
代码:
class ListNode: def __init__(self, x): self.val = x self.next = None class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: NewList = Dum = ListNode(0) #Dum是伪结点 while l1 and l2: if l1.val < l2.val: NewList.next, l1 = l1, l1.next else: NewList.next, l2 = l2, l2.next NewList = NewList.next NewList.next = l1 if l1 else l2 return Dum.next a = ListNode(1) a.next = ListNode(2) a.next.next = ListNode(5) b = ListNode(1) b.next = ListNode(3) b.next.next = ListNode(4) s = Solution() r = s.mergeTwoLists(a,b)
当 l_1l 1 或 l_2l 2 为空时跳出;当 l_1.val < l_2.vall 1 .val<l 2 .val 时: curcur 的后继节点指定为 l_1l 1 ,并 l_1l 1 向前走一步;当 l_1.val geq l_2.vall 1 .val≥l 2 .val 时: curcur 的后继节点指定为 l_2l 2 ,并 l_2l 2 向前走一步 ;节点 curcur 向前走一步,即 cur = cur.nextcur=cur.next 。
作者:jyd链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof/solution/mian-shi-ti-25-he-bing-liang-ge-pai-xu-de-lian-b-2/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。