为了账号安全,请及时绑定邮箱和手机立即绑定

LeetCode 合并两个有序链表

标签:
Python

合并两个有序链表


题目


将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

解题思路


  1. 设定“哨兵节点”,用以正确返回合并后的链表;
  2. 控制 cur 指针,调整它的 next 指针;
  3. 比较两个链表的节点大小,将小的节点接在 cur 节点后面;
  4. 循环操作,当其中一个链表为空时终止;
  5. 若循环结束,其中一个链表不为空,则将剩余部分接在合并链表后面(因为两个链表都是有序的,所以剩余部分都比合并链表的元素大;
  6. 最后,返回合并的链表。

代码实现


# # 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:
        '''将两个有序链表合并成一个链表然后返回

        Args:
            l1: 有序链表 1
            l2: 有序链表 2
        
        Returns:
            返回合并后的有序链表
        '''
         # 定义一个哨兵节点,用以正确返回合并后的链表
        pre_head = ListNode(None)

        # 控制 cur 指针,比较节点大小
        cur = pre_head

        # 比较两个链表的节点大小,当两个链表任意一个为空,则终止
        while l1 and l2:
            # 当 l1 的节点较小,则指针指向 l1,同时向后移
            if l1.val < l2.val:
                cur.next, l1 = l1, l1.next
            else:  # 否则,指针指向 l2,同时向后移
                cur.next, l2 = l2, l2.next
            # 维护 cur 指针
            cur = cur.next
        # 考虑其中任意一个链表为空,将非空的链表拼接在合并链表后面
        cur.next = l1 if l1 else l2
        return pre_head.next

实现效果


merge_two_lists_result.jpg

以上为本篇的主要内容。


结语:祝大家新春大吉,平安喜乐

题外话:希望大家做好个人防护,如非必要,尽量不出门。

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消