知識點:列表、遞歸
思路一:遞歸
pMergedHead指向頭節點值小的鏈表頭,遞歸對剩下兩段鏈表合併
# -*- 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 not pHead1:
return pHead2
if not pHead2:
return pHead1
pMergedHead = None
if pHead1.val <= pHead2.val:
pMergedHead = pHead1
pMergedHead.next = self.Merge(pHead1.next, pHead2)
elif pHead2.val <= pHead1.val:
pMergedHead = pHead2
pMergedHead.next = self.Merge(pHead1, pHead2.next)
return pMergedHead
思路二:非遞歸
pMergedHead和cur指向值小的鏈表頭,cur爲遊標,後面依次連接值小的節點
# -*- coding:utf-8 -*-
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def Merge2(self, pHead1, pHead2):
# write code here
if not pHead1:
return pHead2
elif not pHead2:
return pHead1
cur = pMergedHead = None
if pHead1.val <= pHead2.val:
cur = pMergedHead = pHead1
pHead1 = pHead1.next
elif pHead2.val <= pHead1.val:
cur = pMergedHead = pHead2
pHead2 = pHead2.next
while pHead1 and pHead2:
if pHead1.val <= pHead2.val:
cur.next = pHead1
cur = cur.next
pHead1 = pHead1.next
elif pHead2.val <= pHead1.val:
cur.next = pHead2
pHead2 = pHead2.next
cur = cur.next
if pHead1:
cur.next = pHead1
elif pHead2:
cur.next = pHead2
return pMergedHead