LeetCode:鏈表的中間結點

1、題目描述

給你單鏈表的頭結點?head?,請你找出并返回鏈表的中間結點。

如果有兩個中間結點,則返回第二個中間結點。

示例 1:

輸入:head = [1,2,3,4,5]
輸出:[3,4,5]
解釋:鏈表只有一個中間結點,值為 3 。

示例 2:

輸入:head = [1,2,3,4,5,6]
輸出:[4,5,6]
解釋:該鏈表有兩個中間結點,值分別為 3 和 4 ,返回第二個結點。

提示:

  • 鏈表的結點數范圍是?[1, 100]

  • 1 <= Node.val <= 100

2、解題思路--快慢指針

使用快慢指針(Fast-Slow Pointer)來找到鏈表的中間節點:

  • 快指針(fast):每次移動?兩步fast = fast.next.next)。

  • 慢指針(slow):每次移動?一步slow = slow.next)。

當快指針到達鏈表末尾時,慢指針正好指向鏈表的中間節點。

關鍵點
  1. 循環條件

    • while (fast != null && fast.next != null)

      • fast != null:確保快指針沒有越界(適用于奇數長度鏈表)。

      • fast.next != null:確保快指針可以移動兩步(適用于偶數長度鏈表)。

  2. 奇數長度鏈表

    • 鏈表長度為奇數時,快指針最終會指向最后一個節點fast.next == null),此時慢指針正好指向中間節點

    • 例如:1 -> 2 -> 3 -> 4 -> 5,慢指針指向?3

  3. 偶數長度鏈表

    • 鏈表長度為偶數時,快指針最終會指向?null(因為?fast.next.next?會越界),此時慢指針指向第二個中間節點(題目通常要求返回第二個中間節點)。

    • 例如:1 -> 2 -> 3 -> 4,慢指針指向?3(第二個中間節點)。

public static ListNode middleNode(ListNode head) {ListNode fast = head, slow = head;while (fast != null && fast.next != null) {fast = fast.next.next;  // 快指針每次走兩步slow = slow.next;       // 慢指針每次走一步}return slow;  // 慢指針指向中間節點
}
時間復雜度
  • O(n),其中?n?是鏈表的長度。

  • 快指針遍歷鏈表約?n/2?次,慢指針移動?n/2?次,因此總的時間復雜度是線性的。

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

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

相關文章

LabVIEW溫控系統熱敏電阻滯后問題

在 LabVIEW 構建的溫控系統中&#xff0c;熱敏電阻因熱時間常數大&#xff08;2 秒左右&#xff09;產生的滯后效應&#xff0c;致使控溫出現超調與波動。在不更換傳感器的前提下&#xff0c;可從算法優化、硬件調整和系統設計等維度著手解決。 ? 一、算法優化? 1. 改進 PI…

技術犯規計入個人犯規嗎·棒球1號位

在棒球運動中&#xff0c;雖然沒有“技術犯規”這一特定術語&#xff0c;但存在多種違規行為或違反規則的情況&#xff0c;通常會導致判罰或處罰。以下是常見的違規行為及相關規則&#xff1a; 1. 投手違規&#xff08;Balk&#xff09; 定義&#xff1a;投手在壘上有跑壘員時…

Python核心技巧 類與實例:面向對象編程的基石

、核心概念圖解 &#x1f3af; 類 vs 實例 類&#xff1a;對象的藍圖&#xff08;如"汽車設計圖"&#xff09; 實例&#xff1a;類的具體實現&#xff08;如"你的特斯拉Model 3"&#xff09; class MyClass: # 類聲明 count 0 # 類…

協程補充---viewModelScope 相關知識點

viewModelScope.launch 默認在 Dispatchers.Default 線程池執行Dispatchers.Default 是一個后臺線程池&#xff0c;專門用于 CPU 密集型任務如果需要在主線程執行&#xff0c;必須顯式指定 Dispatchers.Main remember 是 Compose 的狀態管理函數(queueMenus) 是依賴項&#xff…

linux stm32mp157 GIC-V2 中斷處理過程分析

/* ** 中斷觸發時&#xff0c;調用的 handle_arch_irq 入口地址。 ** 因為此時&#xff0c;掛接的就是 gic_handle_irq 函數&#xff01;gic_handle_irq 是個全局函數指針&#xff0c; ** static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs) ** 它是Lin…

動態指令參數:根據組件狀態調整指令行為

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

直方圖比較

目錄 1、直方圖比較的概念 2、直方圖比較的主要原因 3、典型應用場景 4、基礎直方圖比較 5、多通道直方圖比較 6、實時直方圖檢測 1、直方圖比較的概念 直方圖比較是通過數學方法計算兩個直方圖之間的相似度或差異度的技術。在計算機視覺中&#xff0c;直方圖是對圖像特征…

Windows11 VS code 安裝 Cline 調用 Github MCP 配置過程坑點匯總

背景 為了調研 MCP 在 windows 上如何使用本地的命令執行一些操作而實現自動化的過程&#xff0c;在 B 站視頻的指導下&#xff0c;進行相應填坑過程&#xff0c;最終運行起來&#xff0c;并實現 github 自動化編程并提交代碼的過程。 B 站 Cline 視頻演示 Cline Cline 是一…

kdump詳解

kdump 是 Linux 系統中的一種內核崩潰轉儲機制&#xff0c;用于在系統崩潰時將內存中的數據保存到磁盤上&#xff0c;以便后續分析系統崩潰的原因。以下是對 kdump 的詳細介紹&#xff1a; 1、工作原理 kdump 利用了 Linux 系統中的雙啟動機制。當系統啟動時&#xff0c;它會…

RGB三原色

本文來源 &#xff1a; 騰訊元寶 ??RGB三原色&#xff08;紅綠藍&#xff09;詳解?? RGB&#xff08;Red, Green, Blue&#xff09;是光學的三原色&#xff0c;通過不同比例的混合可以產生人眼可見的絕大多數顏色。它是現代顯示技術&#xff08;如屏幕、投影儀&#xff09…

CSS兼容性:挑戰與策略

CSS兼容性&#xff1a;挑戰與策略 引言 在前端開發的廣闊領域中&#xff0c;跨瀏覽器兼容性無疑是最棘手且難以預測的挑戰之一。當我們精心設計的網頁在Chrome中完美呈現&#xff0c;卻在Safari中布局崩潰&#xff0c;或在Firefox中交互失效時&#xff0c;這種挫折感是每位前…

[ 設計模式 ] | 單例模式

單例模式是什么&#xff1f;哪兩種模式&#xff1f; 單例模式就是一個類型的對象&#xff0c;只有一個&#xff0c;比如說搜索引擎中的索引部分&#xff0c;360安全衛士的桌面懸浮球。 餓漢模式和懶漢模式&#xff1a;餓漢模式是線程安全的&#xff0c;懶漢模式不是線程安全的…

Notebook.ai 開源程序是一套工具,供作家、游戲設計師和角色扮演者創建宏偉的宇宙 - 以及其中的一切

?一、軟件介紹 文末提供程序和源碼下載 Notebook.ai 開源程序是一套工具&#xff0c;供作家、游戲設計師和角色扮演者創建宏偉的宇宙 - 以及其中的一切。 二、軟件特點 Notebook 是作家的規劃工具&#xff0c;用于創建從宇宙到角色、情節到單個項目的任何內容。通過瀏覽器、…

centos7.0無法安裝php8.2/8.3

在centos安裝php8.2報錯 configure: error: *** A compiler with support for C17 language features is required. 配置過程檢測到你的系統編譯器不支持 C17 語言特性&#xff0c;而 PHP 8.2 的編譯需要編譯器支持 C17 sudo yum update -y sudo yum install centos-releas…

Three.js + React 實戰系列 - 客戶評價區細解教程 Clients 組件?(回答式評價 + 評分星級)

對個人主頁設計和實現感興趣的朋友可以訂閱我的專欄哦&#xff01;&#xff01;謝謝大家&#xff01;&#xff01;&#xff01; 在這篇博客中&#xff0c;我們將實現一個簡潔的 Hear from My Clients 客戶評價區域。這個區塊在個人主頁中可以突顯用戶體驗和專業度&#xff0c;幫…

Vim 命令從頭學習記錄

學習鏈接&#xff1a;eleon-vim基礎教程 Vim - 基礎翻屏操作 光標移動&#xff1a;hjkl 20j 向下移動20行&#xff0c;w 向后移動一個字符&#xff0c;b 向前移動一個字符。 Ctrl u 向上翻半頁 UP Ctrl d 向下翻半頁 Down Ctrl f 向下翻整頁 Forward Ctrl b 向上翻整頁 …

Linux系統編程--基礎指令(!!詳細講解+知識拓展)

第一講 基礎指令 ? 我們現如今自己使用的電腦大部分是用的都是windows或者macOS&#xff0c;并配合上由微軟和蘋果開發的圖形化界面&#xff0c;所以使用鼠標再屏幕上進行點擊即可完成許多任務。但是作為操作系統的學習者&#xff0c;在linux的基礎上不再使用圖形化界進行操作…

ADK 第四篇 Runner 執行器

智能體執行器 Runner&#xff0c;負責完成一次用戶需求的響應&#xff0c;是ADK中真正讓Agent運行起來的引擎&#xff0c;其核心功能和Agents SDK中的Runner類似&#xff0c;具體作用如下&#xff1a; 會話管理&#xff1a;自動讀取/寫入 SessionService&#xff0c;維護歷史信…

【Tauri2】37——后端處理invoke

目錄 前言 正文 隨便看看 看看get 看看parse_invoke_request 看看message_handler 看看handle_ipc_message 看看webview的on_message方法 第一種情況的處理 第二種情況的處理 運行通信函數 返回的處理 整個流程 前言 【Tauri2】033 __TAURI_INTERNALS__和invoke-C…

kotlin 05flow -從 LiveData 遷移到 Kotlin Flow 完整教程

一 從 LiveData 遷移到 Kotlin Flow 完整教程 LiveData 長期以來是 Android 架構組件中狀態管理的核心&#xff0c;但隨著 Kotlin Flow 的成熟&#xff0c;Google 官方推薦將現有 LiveData 遷移到 Flow。本教程基于官方文章并擴展實踐細節&#xff0c;完成平滑遷移。 一、為什…