劍指Offer第16題-合并兩個(gè)排序的鏈表

題目

輸入兩個(gè)單調(diào)遞增的鏈表,輸出兩個(gè)鏈表合成后的鏈表,當(dāng)然我們需要合成后的鏈表滿足單調(diào)不減規(guī)則。

思路

基本思路很簡單,新建一個(gè)頭結(jié)點(diǎn)new_head,然后每次比較兩個(gè)鏈表的頭結(jié)點(diǎn),把小的結(jié)點(diǎn)鏈到新頭結(jié)點(diǎn)的后面

代碼

非遞歸版本

# -*- 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
        p = new_head = ListNode(None)
        while True:
            if not pHead1:
                new_head.next = pHead2
                break
            if not pHead2:
                new_head.next = pHead1
                break
            if pHead1.val <= pHead2.val:
                new_head.next = pHead1
                pHead1 = pHead1.next
            else:
                new_head.next = pHead2
                pHead2 = pHead2.next
            new_head = new_head.next
        return p.next

遞歸版本

# -*- 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

        new_head = None
        if pHead1.val <= pHead2.val:
            new_head = pHead1
            new_head.next = self.Merge(pHead1.next, pHead2)
        else:
            new_head = pHead2
            new_head.next = self.Merge(pHead2.next, pHead1)
        return new_head
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容