合并两个有序链表
https://leetcode.cn/problems/merge-two-sorted-lists/ (opens new window) 需要注意的点
- 需要返回虚拟头节点.next
- 进行迭代的是另一个指针, 需要进行不断后移
- 判断的重要性
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeTwoLists(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
# 虚拟头节点,返回该节点.next
prehead = ListNode(-1)
# 进行迭代的真实指针
prev = prehead
p1 = l1
p2 = l2
while p1 and p2:
if p1.val >= p2.val:
prev.next = p2
p2 = p2.next
else:
prev.next = p1
p1 = p1.next
# 此时的prev 的指针并不是更新后的位置,需要往后移
# prev = prev.next
# 可以简单理解成1. prev = prehead, 2. prev.next = p1 or p2 3.prev = prev.next
prev = prev.next
# 这个判断很重要
# 如果p1 or p2 为空,返回p1 or p2
# 如果进行过循环后,p1 or p2 为空, prev.next = p1 or p2
prev.next = p1 if p1 is not None else p2
# 返回prehead.next
return prehead.next