快慢指標:快慢指標是解決陣列和鍊錶問題的常用方法,該方法也被稱為「龜兔演算法」。從名稱就可以看出氣基本思想是使用兩個指標以不同的速度在陣列或鍊錶中移動。在處理迴圈鍊錶或陣列時,此方法非常有用。
快慢指標的應用:
(1)判斷單鏈表是否存在環
如果鍊錶存在環,就好像操場的跑道是乙個環形一樣,此時讓快慢指標都從煉表頭開始遍歷,快指標每次向前移動兩個位置,慢指標每次向前移動乙個位置;如果快指標到達null,說明鍊錶以null為結尾,沒有環。如果快指標追上慢指標,則表示有環。**如下:
bool hascircle
(node *head)
return false;
}
(2)在有序鍊錶中尋找中位數
快指標的移動速度是慢指標移動速度的2倍,因為當快指標到達鍊錶尾時,慢指標到達中點。
程式還要考慮鍊錶結點個數的奇偶數因素,當快指標移動x次後到達表尾(1+2x),說明鍊錶有奇數個結點,直接返回慢指標指向的資料即可。
如果快指標是倒數第二個結點,說明鍊錶結點個數是偶數,這時可以根據」規則「返回上中位數或下中位數或(上中位數+下中位數)的一半。
while
(fast && slow)
}
(3)輸出鍊錶中的倒數第k個結點(即正數第k-1個節點)
可以定義兩個指標,第乙個指標從鍊錶的頭指標開始遍歷向前走k-1步,第二個指標保持不動;從第k步開始,第二個指標也開始從鍊錶的頭指標開始遍歷。由於兩個指標的距離保持在k-1,當第乙個指標到達鍊錶的尾節點時候,第二個指標正好是倒數第k個節點,**如下:
//查詢單鏈表中倒數第k個結點
listnode *
rgetkthnode
(listnode * phead, unsingnes int k)
//函式前面的r代表反向
while
(pahead->next !=
null
)//前後兩個指標一起向前走,知道前面的指標指向最後乙個結點
return pbehind;
//後面的指標所指結點就是倒數第k個結點
快慢指標的應用
1 definition for singly linked list.2 public class listnode 9 10 11public class solution 16 listnode slow head 17 listnode fast head 18while fast null...
C 快慢指標的應用
快慢指標的應用 1 判斷單鏈表是否存在環 如果鍊錶是乙個環,就好像操場的跑道是乙個環一樣,此時快慢指標都從煉表頭開始遍歷,快指標每次向前移動兩個位置,慢指標每次向前移動乙個位置 如果快指標到達null,說明鍊錶以null為結尾,沒有環。如果快指標追上慢指標,則表示有環。如下 bool hascirc...
快慢指標在鍊錶的應用
快慢指標中的快慢指的是移動的步長,即每次向前移動速度的快慢。例如可以讓快指標每次沿鍊錶向前移動2,慢指標每次向前移動1次。1 判斷單鏈表是否為迴圈鍊錶 演算法 讓快慢指標從煉表頭開始遍歷,快指標向前移動兩個位置,慢指標向前移動乙個位置 如果快指標到達null,說明鍊錶以null為結尾,不是迴圈鍊錶。...