文章目录
双指针
# 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:
if not l1:
return l2
if not l2:
return l1
node1, node2 = l1, l2
if l1.val <= l2.val:
head = l1
node1 = node1.next
else:
head = l2
node2 = node2.next
node = head
while node1 and node2:
if node1.val <= node2.val:
node.next = node1
node = node.next
node1 = node1.next
else:
node.next = node2
node = node.next
node2 = node2.next
# 若node1遍历完
if not node1:
node.next = node2
if not node2:
node.next = node1
return head
更简洁的写法,参考
# 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