31 合并两个排序的链表--剑指offer--python实现

1. 题目描述

  描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

2. 题目解析

2.1 考察问题

  本问题考察的是链表的遍历、比较和插入。

2.2 解决方法

  1. 循环遍历
      分别从两个链表中取一个元素比较,谁小把谁插入;然后再从该链表中取出一个元素,执行上述过程,直到其中一个为空,把另一个链表直接插到最后,结束。
  2. 递归
      每次取出一个小元素,然后合并后边的链表,直到其中一个链表为空,返回另一个链表,结束。

2.3 优化分析

  链表的遍历,往往循环可以解决,但是递归方式代码会很简洁,当然也不是那么好理解。思维深度,决定了你的表达简洁度。

3. 代码实现

3.1 循环遍历

class Solution:
        def Merge(self, pHead1, pHead2):
        if not pHead1:
            return pHead2
        if not pHead2:
            return pHead1
        pNew = None
        pNewHead = None
        while True:
            if not pHead1:
                pNew.next = pHead2
                break
            if not pHead2:
                pNew.next = pHead1
                break

            if pHead1.val <= pHead2.val:  ### if判断选出较小值
                nodeSmall = pHead1
                pHead1 = pHead1.next
            else:
                nodeSmall = pHead2
                pHead2 = pHead2.next  

            if not pNew:  ## 执行链表插入,
                pNew = nodeSmall  ##头部初始化
                pNewHead = pNew
            else:
                pNew.next = nodeSmall  ### 后续插入
                pNew = pNew.next
                pNew.next = None
        return pNewHead

3.2 递归实现

class Solution:
        def Merge(self, pHead1, pHead2):
        if not pHead1:
            return pHead2
        if not pHead2:
            return pHead1
        if pHead1.val <= pHead2.val:
            pHead1.next = self.Merge(pHead1.next, pHead2)
            return pHead1 ### 首次进来,如果pHead1 小,则一定是以pHead1 作为头的,所以最后递归完成返回pHead1
        else:
            pHead2.next = self.Merge(pHead1, pHead2.next)
            return pHead2 ### 同上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值