题目描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解答如下:
环境:python 2.7.3
本题给出两个单调递增链表,最后要求合成为单调不减链表。本题先判断两链表是否为空,不为空时判断哪个链表的第一个节点值小,小者作为新的链表头newHead,然后设置prePtr指针指向新链表的表尾,这样做是为了采用尾插法插入新的节点,采用两个指针pTmp1和pTmp2遍历两个链表,并找出下一个较小节点,然后把这个较小节点尾插到新链表尾结点prePtr的后面,然后把尾指针prePtr后移。
当有一个链表的pTmp指向None时,代表该链表提前遍历完了,那么可以把另一个链表剩下的节点直接接入到newHead链表的尾部。
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
pTmp1 = pHead1
pTmp2 = pHead2
if newHead == pTmp1:
pTmp1 = pTmp1.next
else:
pTmp2 = pTmp2.next
prePtr = newHead
while pTmp1 and pTmp2:
if pTmp1.val <= pTmp2.val:
prePtr.next = pTmp1
pTmp1 = pTmp1.next
else:
prePtr.next = pTmp2
pTmp2 = pTmp2.next
prePtr = prePtr.next
if pTmp1 == None:
prePtr.next = pTmp2
else:
prePtr.next = pTmp1
return newHead