快慢指標保姆級解析

2021-10-04 07:04:51 字數 1291 閱讀 9422

快慢指標這個思想常用於尋求鍊錶中的中間節點,或者說是判斷鍊錶中是否有環。

首先講一下如何尋找鍊錶中的中間節點,先分別設兩個指標,快:fast和慢:slow兩個指標,其中fast指標每次移動數都比slow多走一步,當fast指標走到鍊錶末尾時,slow就剛好走到鍊錶的中間。

給定乙個帶有頭結點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 之間。
/**

* definition for singly-linked list.

* public class listnode

* }*/class

solution

return slow;

}}

接著講一下如何判斷鍊錶中是否有環

先是和之前一樣,設定兩個指標,分別是快慢指標fast和slow,當這兩個指標都進入到鍊錶的環中的時候,無論相隔多少個節點,快慢指標都會指向同乙個節點,那麼就能判斷這個鍊錶中有環了。

public

boolean

ifcycle

(listnode head)

listnode fast = head;

listnode slow = head;

while

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

}return

false

;}

新手保姆級解析C 解日曆問題

已知 2007 年 10 月 10 日,請求出 nnn 天後是幾月幾號 多組輸入,每組輸入為 111 行,為乙個正整數 n 1 n 2000 輸出描述 對於每組輸入,輸出格式為yyyy mm dd,輸出的值為 nnn 天後的日期 樣例輸入 樣例輸出 2007 10 11 2007 10 12 inc...

Git 保姆級教學

git是乙個分布式版本控制器 安裝教程 1.現在有乙個專案,從0開始,如在e盤下建立乙個空資料夾,進入資料夾,滑鼠右擊,點git bash here 2.進入git命令框,輸入git init,然後該檔案下會出現乙個.git的隱藏檔案 git init 3.建立乙個a.py的檔案,可以在資料夾裡右擊...

C 從入門到放棄保姆級教程 指標

上 應該很好理解 int main 那麼有了指標我們可以做什麼?這裡很明顯可以看到 b就是a,我可以通過對 b的修改達到修改a的目的 int main 那這樣間接修改有什麼用呢?一種用法是函式的引數,我們之前就學過,函式傳引數的時候,是 copy 了乙個副本使用,不能對原來的修改 voidf int...