題目描述
輸入兩個單調(diào)遞增的鏈表,輸出兩個鏈表合成后的鏈表,當(dāng)然我們需要合成后的鏈表滿足單調(diào)不減規(guī)則。
# -*- 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):
# 如果任何一個鏈表為空,那么返回另一個鏈表
if not pHead1:
return pHead2
if not pHead2:
return pHead1
# 選擇兩個頭節(jié)點中值最小的那個作為新的頭節(jié)點,然后新的頭節(jié)點的下一個節(jié)點就可以遞歸下去
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)的方法來歸并鏈表
# 借助兩個輔助節(jié)點,其中begin用于定位返回鏈表的頭節(jié)點,pre用于定位返回鏈表的當(dāng)前節(jié)點
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
# 注意處理兩個鏈表長度不一致的情況
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()
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。