一、題目描述
給定一個頭結點為head的非空單鏈表,返回鏈表的中間結點。
如果有兩個中間結點,則返回第二個中間結點。
示例 1:
輸入:[1,2,3,4,5] 輸出:此列表中的結點 3 (序列化形式:[3,4,5]) 返回的結點值為 3 。(測評系統對該結點序列化表述是[3,4,5])。 注意,我們返回了一個 ListNode 類型的對象 ans,這樣: ans.val=3,ans.next.val=4,ans.next.next.val=5,以及ans.next.next.next=NULL.
示例 2:
輸入:[1,2,3,4,5,6] 輸出:此列表中的結點 4 (序列化形式:[4,5,6]) 由于該列表有兩個中間結點,值分別為 3 和 4,我們返回第二個結點。
提示:
給定鏈表的結點數介于1和100之間。
二、題目解析
我個人認為這道題目是最好理解快慢指針這個知識點了。


不難理解整體的思路如下:
1、設置兩個指針,一開始都指向鏈表的頭節點;
2、接下來,讓這兩個指針向前移動;
3、如果可以移動,那么就會讓快指針每次移動兩步,慢指針每次移動一步;
4、而快指針可以移動兩步的前提就是當前節點不為空,同時下一節點也不為空,這樣才能保證 fast.next 有值、fast.next.next 有值
5、最后,slow 指向的就是中間節點。
三、參考代碼
// LeetCode 100題精講:https://mp.weixin.qq.com/s/yznC53g46phq3qF7V4-obA //作者:程序員吳師兄 //鏈表的中間結點(LeetCode 876):https://leetcode.cn/problems/middle-of-the-linked-list/ classSolution{ publicListNodemiddleNode(ListNodehead){ //設置兩個指針,一開始都指向鏈表的頭節點 ListNodeslow=head; ListNodefast=head; //接下來,讓這兩個指針向前移動 //如果可以移動,那么就會讓快指針每次移動兩步,慢指針每次移動一步 //而快指針可以移動兩步的前提就是當前節點不為空,同時下一節點也不為空 //這樣才能保證fast.next有值、fast.next.next有值 while(fast!=null&&fast.next!=null){ //慢指針每次移動一步 slow=slow.next; //快指針每次移動兩步 fast=fast.next.next; } //最后,slow指向的就是中間節點 returnslow; } }
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
鏈表
+關注
關注
0文章
80瀏覽量
11061
原文標題:【鏈表篇】LeetCode 876、鏈表的中間結點
文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
單鏈表代碼頭結點數據無效
//注意:該文件操作的單鏈表為帶頭結點單鏈表,頭結點數據無效#include #include #include #define OK 1#define ERROR 0typedef
發表于 03-27 00:43
合并兩個排序的鏈表
合并兩個排序的鏈表一、題目要求 輸入兩個單調遞增的鏈表,輸出兩個鏈表合成后的鏈表,當然我們需要合成后的鏈表滿足單調不減規則。 二、我的思路
發表于 01-16 22:02
?728次閱讀
C++結構體與鏈表的實驗報告資料免費下載
本文檔的主要內容詳細介紹的是C++結構體與鏈表的實驗報告資料免費下載。
一、目的和要求1. 掌握結構體類型、結構體變量的基本概念;2. 掌握結構體指針、結構體數組的應用;3. 掌握鏈表的基本概念;4. 掌握
發表于 05-27 08:00
?4次下載
鏈表的基礎知識
,也就是數組,數組的每個元素之間的地址是連續的;對于鏈式存儲來說,也就是平常所說的鏈表,鏈表每個元素之間的地址并不是連續的,而是分散的,他們之間的聯系通過結點的 next 指針來建立。本文盡可能地將
C語言入門之鏈表概述
鏈表是一種常見的重要的數據結構。它是動態地進行存儲分配的一種結構,是根據需要開辟內存單元。
鏈表有一個“頭指針”變量,它存放一個地址,該地址指向一個元素。
鏈表中每一個元素稱為“結
LeetCode876鏈表的中間結點介紹
評論