題目描述
輸入兩個(gè)單調(diào)遞增的鏈表,輸出兩個(gè)鏈表合成后的鏈表,當(dāng)然我們需要合成后的鏈表滿足單調(diào)不減規(guī)則。
創(chuàng)新互聯(lián)云計(jì)算的互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)13年的服務(wù)器租用、溫江服務(wù)器租用、云服務(wù)器、虛擬空間、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn),已先后獲得國(guó)家工業(yè)和信息化部頒發(fā)的互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)許可證。專業(yè)提供云主機(jī)、虛擬空間、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
# -*- coding: utf-8 -*-
# @Time : 2019-04-24 10:17
# @Author : Jayce Wong
# @ProjectName : job
# @FileName : mergeSortedLinkedList.py
# @Blog : https://blog.51cto.com/jayce1111
# @Github : https://github.com/SysuJayce
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
# 返回合并后列表
def Merge(self, pHead1, pHead2):
# 如果任何一個(gè)鏈表為空,那么返回另一個(gè)鏈表
if not pHead1:
return pHead2
if not pHead2:
return pHead1
# 選擇兩個(gè)頭節(jié)點(diǎn)中值最小的那個(gè)作為新的頭節(jié)點(diǎn),然后新的頭節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)就可以遞歸下去
if pHead1.val < pHead2.val:
head = pHead1
head.next = self.Merge(pHead1.next, pHead2)
else:
head = pHead2
head.next = self.Merge(pHead1, pHead2.next)
return head
def Merge2(self, pHead1, pHead2):
# 也可以不用遞歸的方法,使用循環(huán)的方法來(lái)歸并鏈表
# 借助兩個(gè)輔助節(jié)點(diǎn),其中begin用于定位返回鏈表的頭節(jié)點(diǎn),pre用于定位返回鏈表的當(dāng)前節(jié)點(diǎn)
begin = pre = ListNode(0)
while pHead1 and pHead2:
if pHead1.val < pHead2.val:
pre.next = pHead1
pre = pre.next
pHead1 = pHead1.next
else:
pre.next = pHead2
pre = pre.next
pHead2 = pHead2.next
# 注意處理兩個(gè)鏈表長(zhǎng)度不一致的情況
if not pHead1:
pre.next = pHead2
if not pHead2:
pre.next = pHead1
return begin.next
def main():
p1 = ListNode(1)
p1.next = ListNode(3)
p1.next.next = ListNode(5)
p2 = ListNode(2)
p2.next = ListNode(4)
p2.next.next = ListNode(6)
p = Solution().Merge(p1, p2)
while p:
print(p.val)
p = p.next
if __name__ == '__main__':
main()