题目描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回合并后列表
def Merge(self, pHead1, pHead2):
# write code here
# 先判断两个头结点是否为空
if pHead1 == None:
return pHead2
if pHead2 == None:
return pHead1
# 代替最小节点
newhead = pHead1 if pHead1.val < pHead2.val else pHead2
# 保存当前两个头结点
tmp1 = pHead1
tmp2 = pHead2
#判断最小节点是哪一个,然后移动指针指向下一个元素
if newhead == tmp1:
tmp1 = tmp1.next
else:
tmp2 = tmp2.next
previous = newhead
# 循环比较
while tmp1 and tmp2:
# 比较最小元素的下一个节点和另一个链表头节点大小
if tmp1.val < tmp2.val:
previous.next = tmp1
previous = tmp1 #也可以直接加previous = previous.next
tmp1 = tmp1.next
else:
previous.next = tmp2
previous = tmp2
tmp2 = tmp2.next
# 循环结束,然后把剩余元素补上
if tmp1 == None:
previous.next = tmp2
else:
previous.next = tmp1
return newhead
方法二:递归法
class Solution:
# 返回合并后列表
def Merge(self, pHead1, pHead2):
# write code here
if pHead1 == None:
return pHead2
if pHead2 == None:
return pHead1
if pHead1.val < pHead2.val:
pHead1.next = self.Merge(pHead1.next,pHead2)
return pHead1
else:
pHead2.next = self.Merge(pHead1,pHead2.next)
return pHead2
总结:比较两个链表大小的时候,可以设置一个头节点cur,用来保存每一次比较后的值,并且设置两个指针p1,p2,分别遍历两个链表。
1、如果p1.val < p2.val:cur.next = p1 头节点指向下一个较小的节点;cur = cur.next 更新cur的值;p1 = p1.next p1在指向下一个元素;