快慢指標 雙指標

2021-10-04 23:26:57 字數 1457 閱讀 8135

雙指標

二、左右指標的常用演算法

鏈結

利用快慢指標

最開始slow與fast指標都指向鍊錶第乙個節點,

前者解決主要解決鍊錶中的問題,

listnode detectcycle

(listnode head)

slow = head;

while

(slow != fast)

return slow;

}

設相遇點距環的起點的距離為m,

只要我們把快慢指標中的任乙個重新指向 head,然後兩個指標同速前進,k - m 步後就會相遇,相遇之處就是環的起點了。

// slow 就在中間位置

return slow;

回想陣列的歸併排序:求中點索引遞迴地把陣列二分,最後合併兩個有序陣列。對於鍊錶,合併兩個有序鍊錶是很簡單的,難點就在於二分。

但是現在你學會了找到鍊錶的中點,就能實現鍊錶的二分了。關於歸併排序的具體內容本文就不具體展開了。

listnode slow, fast;

slow = fast = head;

while (k-- > 0)

fast = fast.next;

while (fast != null)

return slow;

前文 二分查詢演算法詳解 有詳細講解,這裡只寫最簡單的二分演算法,旨在突出它的雙指標特性:

int binarysearch(int nums, int target)

}直接看一道 leetcode 題目吧:

只要陣列有序,就應該想到雙指標技巧。這道題的解法有點類似二分查詢,通過調節 left 和 right 可以調整 sum 的大小:

void reverse(int nums)

}這也許是雙指標技巧的最高境界了,如果掌握了此演算法,可以解決一大類子字串匹配的問題,不過「滑動視窗」演算法比上述的這些演算法稍微複雜些。

雙指標中的快慢指標

快慢指標是個好東西,經常用在陣列和鍊錶中。小強比小明跑得快,他倆在同乙個環形跑道 同乙個起點開始跑步,只要時間足夠,小強就會超小明一圈追上小明。小強就是快指標,小明就是慢指標。那麼快慢指標有什麼用呢?試想一下,如果跑道不是環形而是直線,那小強永遠不會再和小明相遇。所以常見快慢指標用於檢測鍊錶中是否存...

專題 鍊錶雙指標問題(快慢指標 相遇指標)

雙指標 分別指向兩個鍊錶,每個鍊錶各自乙個指標 快慢指標 指向同乙個鍊錶,一前一後,前進速度不同 相遇指標 指向同乙個有環鏈表,一前一後,前進速度不同 面試題22.鍊錶中倒數第k個節點 definition for singly linked list.public class listnode c...

雙指標(快慢指標)判斷鍊錶是否有環

單鏈表的特點是每個節點知道下乙個節點 如果用乙個指標來判斷是否有環,當沒有環時,指標一直會指到鍊錶的為即指到null,但是當有環時,指標將陷入死迴圈,因為環形鍊錶中沒有null指標作為尾部節點 while head null head head.next return false 找到一種經典解法 ...