剑指 Offer 25. 合并两个排序的链表

1. 题目

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

示例1:

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

限制:
0 <= 链表长度 <= 1000

2. 思路

  • 将两个链表依次输出到一个数组中,由于剑指offer中Python 不能使用sort() 方法,可以采用快排和冒泡排序算法进行排序,输出到新的链表中
  • 遍历两个链表,将值进行比较,小的放到新链表中;如果有链表遍历完成,则直接将另一个链表返回到新链表中

3. 程序

  • 链表转数组,再转链表
# 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:
        l11=[]
        while l1:
            l11.append(l1.val)
            l1= l1.next
        while l2:
            l11.append(l2.val)
            l2 = l2.next
        # 获得数组l11,进行排序,刷题中不允许使用sort()方法
        # 冒泡
        l11
        for i in range(len(l11)):
            for j in range(len(l11)-i-1):
                if l11[j] > l11[j+1]:
                    tp = l11[j+1]
                    l11[j+1] = l11[j]
                    l11[j] = tp
        
        node = ListNode(0)
        tmp = node

        for i in l11:
            tmp.next = ListNode(i) 
            tmp = tmp.next
        return node.next
      
  • 两个链表进行比较
# 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:
        tmp = node = ListNode(0)
        while l1 and l2:
            if l1.val < l2.val:
                tmp.next, l1 = l1, l1.next
            else:
                tmp.next, l2 = l2, l2.next
            tmp = tmp.next
        if l1:
           tmp.next, l1 = l1, l1.next
        if l2:
            tmp.next, l2 = l2,l2.next
        return node.next

4. 总结

  • 思路比较简单,两种方法也容易想到
  • 注意一些基本知识:排序算法,链表是否为空
  • Python 多元赋值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

nsq_ai

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

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

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

打赏作者

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

抵扣说明:

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

余额充值