题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回合并后列表
def Merge(self, pHead1, pHead2):
# write code here
#最后返回newHead
#其中一个链表为空,直接返回另一个
if pHead1 == None:
return pHead2
if pHead2 == None:
return pHead1
#以当前链表头数值小的作为新链表的头指针
if pHead1.val < pHead2.val:
newHead = pHead1
else:
newHead = pHead2
#新定义两个指针,分别指向两个链表的头
ptemp1 = pHead1
ptemp2 = pHead2
#当确定新链表的头指针后,由于占了原来链表的头指针,因此原来链表的头指针需要指向下一位
if newHead == ptemp1:
ptemp1 = ptemp1.next
else:
ptemp2 = ptemp2.next
#由于最后需要返回newHead,新加入指针用于指示新链表当前的最后一个数据,该指针用于指向两个链表比较之后的较小值
#该指针一直移动,直到两个链表其中一个为空
prePtr = newHead
#对两个链表的值进行比较
while ptemp1 and ptemp2:
if ptemp1.val < ptemp2.val:
#当前值小于新链表的值,则新链表的的下一位指向该位置,同时新链表的最新指针应更新到当前位置
#与此同时,ptemp向后移动一位
prePtr.next = ptemp1
prePtr = ptemp1
ptemp1 = ptemp1.next
else:
prePtr.next = ptemp2
prePtr = ptemp2
ptemp2 = ptemp2.next
#当一个链表为空时,直接输出不为空的链表
if ptemp1 == None:
prePtr.next = ptemp2
if ptemp2 == None:
prePtr.next = ptemp1
return newHead