21. 合并两个有序链表 (Python3)

Problem: 21. 合并两个有序链表

文章目录

思路

参考:

解题方法

  1. 为了更方便的进行合并,有必要创建一个伪节点/哨兵节点( dummy = curr = ListNode()),以哨兵节点开始进行双链表的合并。哨兵节点 (dummy)实际上一个常见的链表处理技巧。创建一个哨兵(或称哑节点)节点 dummy,使得链表操作更加简化,因为我们不需要单独处理空链表的情况。此节点不存储任何实际数据,但其 next 指针会指向合并后链表的头节点;
  2. 当某一个链表遍历完,则可以终止迭代,并将另一个链表直接加在合并过的链表后面;
  3. 清楚在迭代中链表合并过程里的coding细节,比如:节点通过指针实现合并(curr.next = list1),节点通过指针实现移动(list2 = list2.next);
  4. 链表的操作均通过节点实现,list1和list2作为节点均可以移动。

Code

# 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, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:

        dummy = curr = ListNode() # 构建哨兵节点,方便链表合并

        while list1 and list2: # 当list1或list2有一个遍历完则停止
            
            if list1.val < list2.val: # 合并list1节点
                curr.next, list1 = list1, list1.next # 比下面的写法更简练
            else:   # 合并list2节点
                curr.next = list2 # 合并节点
                list2 = list2.next # 移动节点
            curr = curr.next # 移动curr节点

        curr.next = list1 if list1 else list2
                
        return dummy.next # 返回哨兵节点后的链表,即为合并链表
  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值