利用Python實現兩個鏈表合併為一個有序鏈表

對於開發工程師來說,實現兩個鏈表合併為一個有序鏈表是必須掌握的技能之一。Python語言在鏈表處理上非常便利,本文將從多個方面詳細闡述如何利用Python實現兩個鏈表合併為一個有序鏈表。

一、鏈表基礎知識

鏈表是一種常用的數據結構,由一系列節點組成。每個節點由數據和指向下一個節點的指針組成,最後一個節點的指針指向NULL。鏈表分為單向鏈表和雙向鏈表。

單向鏈表的每個節點只有一個指向下一個節點的指針,從頭節點往後遍歷;而雙向鏈表的每個節點有兩個指針,一個指向前一個節點,一個指向後一個節點,可以雙向遍歷。

二、合併兩個鏈表基本思路

假設有兩個單調不降鏈表,將它們合併為一個單調不降鏈表。

比較兩個鏈表的頭結點,將較小值的結點加入到新鏈表中,並將該結點從原鏈表頭結點剝離。之後再與另一個鏈表的頭結點進行比較,以此類推,直到其中一個鏈表為空,則將另一個鏈表的所有結點直接加入新鏈表中,最後得到一個有序鏈表。

三、實現代碼

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        head = ListNode(0)  # 定義一個啞節點
        pre = head

        while l1 and l2:
            if l1.val < l2.val:
                pre.next = l1
                l1 = l1.next
            else:
                pre.next = l2
                l2 = l2.next
            pre = pre.next  # 保留新鏈表的尾部

        pre.next = l1 if l1 else l2  # 處理剩餘節點

        return head.next

四、測試樣例

對代碼進行測試是不可缺少的環節,下面給出兩個鏈表測試樣例。

樣例1:

l1 = ListNode(1)
l1.next = ListNode(2)
l1.next.next = ListNode(4)

l2 = ListNode(1)
l2.next = ListNode(3)
l2.next.next = ListNode(4)

s = Solution()
res = s.mergeTwoLists(l1, l2)

while res:
    print(res.val, end=' ')
    res = res.next

輸出結果為:1 1 2 3 4 4

樣例2:

l1 = ListNode(-9)
l1.next = ListNode(3)

l2 = ListNode(5)
l2.next = ListNode(7)

s = Solution()
res = s.mergeTwoLists(l1, l2)

while res:
    print(res.val, end=' ')
    res = res.next

輸出結果為:-9 3 5 7

五、總結

本文詳細介紹了如何利用Python實現兩個鏈表合併為一個有序鏈表。通過對鏈表基礎知識和合併思路的講解,讀者可以更好地理解代碼實現。

值得注意的是,在進行鏈表操作時,一定要小心指針的使用,防止出現死循環或者空指針異常情況。

原創文章,作者:GWLMT,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/375598.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
GWLMT的頭像GWLMT
上一篇 2025-04-29 12:49
下一篇 2025-04-29 12:49

相關推薦

  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • 運維Python和GO應用實踐指南

    本文將從多個角度詳細闡述運維Python和GO的實際應用,包括監控、管理、自動化、部署、持續集成等方面。 一、監控 運維中的監控是保證系統穩定性的重要手段。Python和GO都有強…

    編程 2025-04-29
  • Python編程二級證書考試相關現已可以上網購買

    計算機二級Python考試是一項重要的國家級認證考試,也是Python編程的入門考試。與其他考試一樣,Python編程二級證書的考生需要進入正式考試,而為了備考,這篇文章將詳細介紹…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29

發表回復

登錄後才能評論