LeetCode 21. 合并兩個有序鏈表(Python)

將兩個升序鏈表合并為一個新的 升序 鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。

輸入:l1 = [1,2,4], l2 = [1,3,4]
輸出:[1,1,2,3,4,4]
示例 2:

輸入:l1 = [], l2 = [] 輸出:[]
示例 3:

輸入:l1 = [], l2 = [0] 輸出:[0]

提示:

兩個鏈表的節點數目范圍是 [0, 50]
-100 <= Node.val <= 100 l1 和 l2 均按 非遞減順序 排列

方法一:
使用啞結點(dummy node)和雙指針來遍歷兩個鏈表,比較各自的節點值,將較小值的節點連接到新鏈表上,直至其中一個鏈表為空,最后將剩余部分直接接到新鏈表后面。

def mergeTwoLists(l1: ListNode, l2: ListNode) -> ListNode:# 創建一個啞結點,方便返回結果鏈表dummy = ListNode(0)cur = dummy# 遍歷兩個鏈表,直到有一個為空while l1 and l2:if l1.val <= l2.val:cur.next = l1l1 = l1.nextelse:cur.next = l2l2 = l2.nextcur = cur.next# 將剩余部分接上cur.next = l1 if l1 else l2return dummy.next

代碼解析
1. 初始化啞結點
創建一個啞結點 dummy 并用 cur 指向該節點,方便在不需要處理頭節點特殊情況的同時構造新的鏈表。
2. 雙指針遍歷
使用 while l1 and l2 循環遍歷兩個鏈表。比較 l1 與 l2 當前節點的值,將較小的節點接到新鏈表的尾部,并移動對應鏈表的指針。
3. 接上剩余部分
當其中一個鏈表遍歷完畢后,另一個鏈表可能還有剩余節點,直接將剩余部分接到新鏈表末尾即可。
4. 返回結果:
最后返回 dummy.next,即合并后鏈表的頭結點。

這種方法的時間復雜度為 O(n+m),空間復雜度為 O(1)(不考慮輸出鏈表所需空間)。

方法二:
遞歸方法的核心思想是:比較兩個鏈表的頭節點,較小的那個作為合并后鏈表的頭,然后遞歸合并剩下的部分。

# 定義鏈表節點類
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:# 如果有一個鏈表為空,直接返回另一個鏈表if not l1:return l2if not l2:return l1# 遞歸調用時通過 self 調用類內的方法if l1.val <= l2.val:l1.next = self.mergeTwoLists(l1.next, l2)return l1else:l2.next = self.mergeTwoLists(l1, l2.next)return l2

代碼解析
1. 遞歸終止條件
如果 l1 為空,則直接返回 l2;如果 l2 為空,則返回 l1。這保證了當其中一個鏈表遍歷完時,遞歸能正確結束。
2. 遞歸比較
對于非空的 l1 和 l2,比較它們的值:
? 如果 l1.val 小于等于 l2.val,則將 l1 作為當前節點,并將 l1.next 指向遞歸合并后的結果。
? 否則,將 l2 作為當前節點,并將 l2.next 指向遞歸合并后的結果。
3. 返回結果
遞歸完成后,每一層調用都會返回合并后的鏈表頭,最終返回整個合并后的鏈表。

這種方法同樣能將兩個升序鏈表合并為一個新的升序鏈表,時間復雜度為 O(n+m),但使用了遞歸來實現。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71338.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71338.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71338.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FPGA 配置原理

用戶編程控制的FPGA 是通過加載比特位流配置內部的存儲單元實現的。該存儲單元就是所謂的配置單元&#xff0c;它必須在器件上電后進行配置&#xff0c;從而設置查找表&#xff08;LUT&#xff09;的屬性、連線方式、IOB 電壓標準和其它的用戶設計。 1.配置幀 以Xilinx 公司的…

測試人員如何更好的跟蹤BUG

軟件測試中BUG跟蹤是確保軟件質量的關鍵環節。測試人員不僅需要發現BUG&#xff0c;還需有效管理其狀態&#xff0c;從報告到修復驗證的全過程。如何更好地跟蹤BUG&#xff0c;成為測試人員提升效率的重要課題。本文將詳細探討測試人員可以采用的策略&#xff0c;包括使用工具、…

lamp平臺介紹

一、lamp介紹 網站&#xff1a; 靜態 動態 php語言 .php 作用&#xff1a;運行php語言編寫動態網站應用 lamp Linux Apache MySQL PHP PHP是作為httpd的一個功能模塊存在的 二、部署lamp平臺 1、測試httpd是否可正常返回PHP的響應 2、測試PHP代碼是否可正常連接數據…

2025年滲透測試面試題總結-字某跳動-滲透測試實習生(題目+回答)

網絡安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 字某跳動-滲透測試實習生 滲透流程信息收集如何處理子域名爆破中的泛解析問題繞過CDN尋找真實IPPHPINFO頁面關注…

Spring Boot 自動裝配深度解析與實踐指南

目錄 引言&#xff1a;自動裝配如何重塑Java應用開發&#xff1f; 一、自動裝配核心機制 1.1 自動裝配三大要素 1.2 自動裝配流程 二、自定義自動配置實現 2.1 創建自動配置類 2.2 配置屬性綁定 2.3 注冊自動配置 三、條件注解深度應用 3.1 常用條件注解對比 3.2 自定…

《算法筆記》9.6小節 數據結構專題(2)并查集 問題 C: How Many Tables

題目描述 Today is Ignatius birthday. He invites a lot of friends. Now its dinner time. Ignatius wants to know how many tables he needs at least. You have to notice that not all the friends know each other, and all the friends do not want to stay with stra…

CPU、SOC、MPU、MCU--詳細分析四者的區別

一、CPU 與SOC的區別 1.CPU 對于電腦&#xff0c;我們經常提到&#xff0c;處理器&#xff0c;內存&#xff0c;顯卡&#xff0c;硬盤四大部分可以組成一個基本的電腦。其中的處理器——Central Processing Unit&#xff08;中央處理器&#xff09;。CPU是一臺計算機的運算核…

Linux常用指令學習筆記

文章目錄 前言一、文件和目錄操作指令1. 文件操作2. 目錄操作 二、文件權限管理三、網絡相關指令四、系統管理指令五、文本編輯器基本操作 六、壓縮和解壓指令七、總結 前言 在當今的IT領域&#xff0c;Linux系統因其開源、穩定、安全等特性&#xff0c;廣泛應用于服務器、個人…

android studio通過 jni 調用第三方非標準 so庫

調用第三方的so方法&#xff0c;但這個so內的方法不是標準的jni方法。這就需要我們自己寫jni然后鏈接到第三方so庫&#xff0c;通過jni調用so庫中的方法。 1.簡述&#xff1a; 要先有第三方的so庫.so文件和編譯庫對應的.h頭文件 我們自己用 c/c 創建一個標準的so 庫,比如 my…

Spring(三)容器-注入

一 自動注入Autowire 代碼實現&#xff1a; package org.example.spring01.service;import org.springframework.stereotype.Service;Service public class UserService {}package org.example.spring01.controller;import lombok.Data; import lombok.ToString; import org.…

mac上最好的Python開發環境之Anaconda+Pycharm

為了運行修改 label-studio項目源碼&#xff0c;又不想在windows上運行&#xff0c;便在mac上開始安裝&#xff0c;開始使用poetry安裝&#xff0c;各種報錯&#xff0c;不是zip包解壓不了&#xff0c;就是numpy編譯報錯&#xff0c;pipy.org訪問出錯。最后使用anaconda成功啟動…

IDEA 接入 Deepseek

在本篇文章中&#xff0c;我們將詳細介紹如何在 JetBrains IDEA 中使用 Continue 插件接入 DeepSeek&#xff0c;讓你的 AI 編程助手更智能&#xff0c;提高開發效率。 一、前置準備 在開始之前&#xff0c;請確保你已經具備以下條件&#xff1a; 安裝了 JetBrains IDEA&…

前綴和矩陣

前綴和矩陣&#xff08;Prefix Sum Matrix&#xff09;是一種預處理技術&#xff0c;用于快速計算二維矩陣中任意子矩陣的元素和。其核心思想是通過提前計算并存儲每個位置左上角所有元素的和&#xff0c;將子矩陣和的查詢時間從暴力計算的 (O(mn)) 優化到 (O(1))。以下是構建前…

系統架構評估中的重要概念

(1)敏感點(Sensitivity Point) 和權衡點 (Tradeoff Point)。敏感點和權衡點是關鍵的架構 決策。敏感點是一個或多個構件(和/或構件之間的關系)的特性。研究敏感點可使設計人員 或分析員明確在搞清楚如何實現質量目標時應注意什么。權衡點是影響多個質量屬性的特性&#xff0c; …

SSL證書和HTTPS:全面解析它們的功能與重要性

每當我們在互聯網上輸入個人信息、進行在線交易時&#xff0c;背后是否有一個安全的保障&#xff1f;這時&#xff0c;SSL證書和HTTPS便扮演了至關重要的角色。本文將全面分析SSL證書和HTTPS的含義、功能、重要性以及它們在網絡安全中的作用。 一、SSL證書的定義與基本概念 S…

基于微信小程序的停車場管理系統的設計與實現

第1章 緒論 1.1 課題背景 隨著移動互聯形式的不斷發展&#xff0c;各行各業都在摸索移動互聯對本行業的改變&#xff0c;不斷的嘗試開發出適合于本行業或者本公司的APP。但是這樣一來用戶的手機上就需要安裝各種軟件&#xff0c;但是APP作為一個只為某個公司服務的一個軟件&a…

寶塔找不到php擴展swoole,服務器編譯安裝

1. 在php7.4中安裝swoole&#xff0c;但找不到這個擴展安裝 2. 服務器下載源碼解壓安裝 http://pecl.php.net/package/swoole 下載4.8.0版本 解壓到/www/server/php/74/下 3. 發現報錯問題&#xff1b; 更新一下依賴 yum update yum -y install gcc gcc-c autoconf libjpe…

大數據測試總結

總結測試要點&#xff1a; 參考產品文檔&#xff0c;技術文檔梳理以下內容 需求來源 業務方應用場景 數據源&#xff0c;數據格轉&#xff0c;數據產出&#xff0c;數據呈現方式&#xff08;數據消亡史&#xff09;&#xff0c;數據量級&#xff08;增量&#xff0c;全量&am…

React封裝通用Table組件,支持搜索(多條件)、篩選、自動序號、數據量統計等功能。未采用二次封裝調整靈活,包含使用文檔

封裝通用組件 一、封裝思想二、react代碼三、css代碼四、實現效果五、使用文檔 BasicTableModal 表格模態框組件1.組件簡介2.功能特點3.使用方法基礎用法寬度控制示例帶篩選功能搜索功能示例自定義單元格渲染 4.API 說明PropsColumn 配置項Filter 配置項 5.注意事項 一、封裝思…

React 中 useState 的 基礎使用

概念&#xff1a;useState 是一個React Hook&#xff08;函數&#xff09;&#xff0c;它允許我們向組件添加狀態變量&#xff0c;從而影響組件的渲染結果。 本質&#xff1a;和普通JS變量不同的是&#xff0c;狀態變量一旦發生變化&#xff0c;組件的視圖UI也會跟著變化&…