输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:可以简单的同步遍历两个链表,把大的放入新的链表。但是这样做要考虑的事情很多,比如两个链表中的某一个会提前遍历完,新链表的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