您好,登錄后才能下訂單哦!
題目描述
輸入兩個單調遞增的鏈表,輸出兩個鏈表合成后的鏈表,當然我們需要合成后的鏈表滿足單調不減規則。
# -*- 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
# 選擇兩個頭節點中值最小的那個作為新的頭節點,然后新的頭節點的下一個節點就可以遞歸下去
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):
# 也可以不用遞歸的方法,使用循環的方法來歸并鏈表
# 借助兩個輔助節點,其中begin用于定位返回鏈表的頭節點,pre用于定位返回鏈表的當前節點
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()
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。