1. 程式人生 > 實用技巧 >雙指標技巧彙總

雙指標技巧彙總

1.判定連結串列中是否含有環

快指標走兩步,慢指標走一步:
快指標走到null,無環
兩個指標相遇,有環

為什麼有環二者一定會相遇?

這裡給出我的理解。以下圖這個有環的連結串列為例,
在這裡插入圖片描述

從“快指標和慢指標同時從連結串列的頭結點出發”到“快指標最終和慢指標相遇”,這中間的過程可以分為兩個階段:“無聊的第1階段:快指標、慢指標一起往前跑”和“精彩的第2階段——快指標追慢指標”。


在“無聊的第1階段:快指標、慢指標一起往前跑”中,快指標和慢指標一起往前跑,每一次快指標往前跑兩步、慢指標往前跑一步,直到快指標出現在慢指標的後面,具體請看下圖。

無聊的第一階段
在這裡插入圖片描述
在“精彩的第2階段——快指標追慢指標”中,

精彩的第二階段

對於連結串列有環的情況,為什麼快慢指標一定會相遇?快慢指標一定會相遇的精髓在於:當“快指標出現在慢指標後面”之後,每一次“快指標往前走兩步、慢指標往前走一步”,相當於快指標和慢指標之間的相對距離減少1步。

假如說,當快指標剛剛繞到慢指標後面時,快指標離慢指標有n步。那麼,對於接下來的每一次“快指標往前走兩步、慢指標往前走一步”,快指標和慢指標之間的距離由n步變成n-1步、由n-1步變成n-2步、……、由3步變成2步、由2步變成1步、由1步變成0步。

所以對於有環的情況,快慢指標一定會相遇。
轉自:https://editor.csdn.net/md?not_checkout=1&articleId=109209104