合并两个有序链表 python

作者:CYL

日期:2020-10-11

标签:有序链表

问题描述:

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

示例:

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

解题思路:

  • 思路一、最傻逼的方法是遍历一遍然后把值存在列表里面 然后 对列表排序 再构建新的有序链表 如果给定两个无序链表 那这种方法是切实有效的 但是当给定两个有序链表显然不太合适
  • 思路二、两个指针 分别 指向 list1 和 list2 然后每一次取小的链接到新的链表后面
    但是这样会多占用位置(下列代码是这么实现的)
  • 思路三、比较list1 list2的头 的val 然后取比较小的链表 作为新链表的体。依次取小的节点往该链表中插入
    好处是 不会产生新的节点 不占用新的空间 思路清楚的话 代码量也会更小
    坏处是 逻辑稍微复杂辣么一丢丢

代码:

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def mergeTwoLists(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        if l1 is None:
            return l2
        elif l2 is None:
            return l1

        x = l1 #指针x
        y = l2 #指针y

        new_list = ListNode()
        z = new_list #指针z 指向新列表

        while not x is None and not y is None:
            if x.val <= y.val :
                new_node = ListNode(val = x.val)
                z.next = new_node
                z = z.next
                x = x.next
            else:
                new_node = ListNode(val=y.val)
                z.next = new_node
                z = z.next
                y = y.next
        
        if x is None :
            z.next = y
        elif y is None:
            z.next = x
        
        new_list = new_list.next

        return new_list

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中南大学苹果实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值