演算法學習 快慢指標的作用及其應用場景

2021-10-24 21:28:07 字數 1217 閱讀 4292

初始時,快指標fast和慢指標slow均指向鍊錶的左端點。我們將快指標fast向右移動兩次的同時,將慢指標slow向右移動一次,直到快指標到達邊界(即快指標到達右端點或快指標的下乙個節點是右端點)。此時,慢指標slow對應的元素就是中位數。

// 知道右邊界

func

getmid

(left, right *node)

*node

fast := left

slow := left

for;fast != right && fast.next != right;

return slow

}nil

// 不知道右邊界

func

getmid

(left *node)

*node

fast := left

slow := left

for;fast.next !=

nil&& fast.next.next !=

nil;

return slow

}

這裡實際上也是跟上面一樣,不過這裡的判斷條件就是如果存在fast==slow那就一定有環,沒有環的條件也就是fast到盡頭了

func

i***sis

(left *node)

bool

fast := left

slow := left

for;fast.next !=

nil&& fast.next.next !=

nil;

}return

false

}

這裡的前提就是存在環哈,假定存在環的時候,這裡我們可以利用上之前的快慢指標fast 和 slow。這裡有個定理吧,當fast==slow時,將slow指向head,然後fast和slow一步步指向下乙個節點,當兩個指標再次相等的時候就是這個環的入口了

證明啊,看這個連線吧

func

i***sis

(head *node)

*node

fast := head

slow := head

for;fast.next !=

nil&& fast.next.next !=

nil;}}

return

nil}

快慢指標的應用

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...

快慢指標的常見應用

快慢指標 快慢指標是解決陣列和鍊錶問題的常用方法,該方法也被稱為 龜兔演算法 從名稱就可以看出氣基本思想是使用兩個指標以不同的速度在陣列或鍊錶中移動。在處理迴圈鍊錶或陣列時,此方法非常有用。快慢指標的應用 1 判斷單鏈表是否存在環 如果鍊錶存在環,就好像操場的跑道是乙個環形一樣,此時讓快慢指標都從煉...