题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:
这道题的思路有点类似于归并排序,即依次比较两个链表的头结点,将较小的头结点取出来,被取头结点所在的链表更新头结点之后再与另外的链表进行头结点大小比较,直到其中一个链表节点被取完为空,然后将剩下的不为空的链表接在排序好的链表后面。
Solution:
Python
# -*- 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
if pHead1 is None or pHead2 is None: #首先判断链表是否为空,如果为空则返回不为空链表,如果都为空则返回空
return pHead1 or pHead2
dummy1 = dummy = ListNode(-1) #构造两个辅助链表指针,dummy用来更新排好序的链表,dummy1用来返回整个排好序的链表
while pHead1 and pHead2: #保证两个链表都不为空的时候进行头结点数值大小比较
if pHead1.val >= pHead2.val: #pHead2头结点值小于pHead1头结点值
tmp = pHead2.next #tmp指针暂时存储链表头结点后面的整个链表
pHead2.next = None #断开pHead2的头结点
dummy.next = pHead2 #将pHead2头结点链接到dummy链表上存储
pHead2 = tmp #更新pHead2的头结点
elif pHead1.val < pHead2.val:
tmp = pHead1.next
pHead1.next = None
dummy.next = pHead1
pHead1 = tmp
dummy = dummy.next #dummy指针移动到排好序的链表末尾元素
dummy.next = pHead1 or pHead2 #当其中一个链表为空后,直接将另外的剩余链表接到dummy之后即可
return dummy1.next