快慢指標在鍊錶的應用

2021-07-09 11:00:52 字數 500 閱讀 5738

快慢指標中的快慢指的是移動的步長,即每次向前移動速度的快慢。例如可以讓快指標每次沿鍊錶向前移動2,慢指標每次向前移動1次。

1、判斷單鏈表是否為迴圈鍊錶:

演算法: 讓快慢指標從煉表頭開始遍歷,快指標向前移動兩個位置,慢指標向前移動乙個位置;如果快指標到達null,說明鍊錶以null為結尾,不是迴圈鍊錶。如果 快指標追上慢指標,則表示出現了迴圈。

fast=slow=head;

while(true)

}2、在有序鍊錶中尋找中位數

該方法在不借助計數器變數實現尋找中位數的功能。原理是:快指標的移動速度是慢指標移動速度的2倍,因此當快指標到達鍊錶尾時,慢指標到達中點。程式還要考慮鍊錶結點個數的奇偶數因素,當快指標移動x次後到達表尾(1+2x),說明鍊錶有奇數個結點,直接返回慢指標指向的資料即可。如果快指標是倒數第二個結點,說明鍊錶結點個數是偶數,這時可以根據「規則」返回上中位數或下中位數或(上中位數+下中位數)的一半。

while (fast&&slow) 

}  

快慢指標在鍊錶中的應用

快慢指標指的是定義兩個指標,這兩個指標的移動速度一快一慢,以此來製造出自己想要的差值,這個差值可以讓 我們找到鍊錶上相應的結點。一般情況下,快指標的移動步長為慢指標的兩倍 利用快慢指標,我們把乙個鍊錶看成乙個跑道,假設a的速度是b的兩倍,那麼當a跑完全程後,b剛好跑一半,以 此來達到找到中間節點的目...

快慢指標在鍊錶中的應用

快慢指標也是面試中的乙個常考知識點,主要是鍊錶的問題中應用較多。設定兩個指標 fast,slow 初始值都指向頭,slow每次前進一步,fast每次前進二步,如果鍊錶存在環,則fast必定先進入環,而slow後進入環,兩個指標必定相遇。當然,fast先行頭到尾部為null,則為無環鏈表 程式如下 0...

鍊錶快慢指標

public listnode removenthfromend listnode head,int n 為了找到要刪除的節點的前乙個節點,所以此處讓fast.next null while fast.next null 此時head為倒數第n個節點的前乙個節點。slow.next slow.nex...