剑指Offer刷题笔记——合并两个排序的链表

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

 

思路:可以简单的同步遍历两个链表,把大的放入新的链表。但是这样做要考虑的事情很多,比如两个链表中的某一个会提前遍历完,新链表的val和next属性不是同步更新的(选出某一个值放入新链表的时候不知道新链表的下一个结点是谁)。所以采取一种递归方式,来处理。

class Solution:
    # 返回合并后列表
    def Merge(self, pHead1, pHead2):
        # write code here

# 判断提前遍历完
        if not pHead1:
            return pHead2
        if not pHead2:
            return pHead1

 

# 声明一个新的链表
        pMergeHead = None

# 判断两个两个链表头部结点的数值大小
        if pHead1.val < pHead2.val:

# 此时pMergeHead指向的是pHead1.next
            pMergeHead = pHead1

# 新链表中的这个结点数值是正确的,但是指向是不对的。

# 需要递归调用函数,找到下一个结点(下一个结点用同样方式找到自己next属性)。

# pHead1 已经放在新链表里了,所以递归用的时候参数要用pHead1.next
            pMergeHead.next = self.Merge(pHead1.next, pHead2)
        else:
            pMergeHead = pHead2
            pMergeHead.next = self.Merge(pHead1, pHead2.next)
        return pMergeHead

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值