辅助节点法
借助辅助节点cur
,dum
。cur
负责将遍历l1
、l2
,根据l1
、l2
的大小关系来确定添加到cur
节点的顺序。
dum
指向cur
因为l1
,l2
都是有序的,如果出现其中一个节点走到底了,另外一个直接拼接上去即可。
算法流程:
初始化cur
、dum
, 将dum
指向cur
循环l1
或者l2
, 终止条件:l1
或者l2
为null
当l1.val < l2.val
时, cur.next = l1
将cur
的下一个节点指向l1
,l1
向后走一步
否则 cur.next
= l2 cur
的下一个节点指向l2并且l2向后走一步
最后cur向后走一步cur=cur.next
最后合并尾部: 如果出现有剩余未合并的直接拼接到cur后即可。cur.next = l1 if l1 else l2
最终返回结果为dum.next
来表示这个完整的链表
代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
cur = dum = ListNode(0)
while l1 and l2:
if l1.val < l2.val:
cur.next = l1
l1 = l1.next
else:
cur.next = l2
l2 = l2.next
cur = cur.next
cur.next = l1 if l1 else l2
return dum.next