java判斷單鏈表是否有環

2021-08-28 05:31:19 字數 907 閱讀 2004

演算法和資料結構是面試考核的重點,其中經常問到單鏈表的問題,比如單鏈表的逆置、判斷單鏈表是否有環等問題,這些主要考察的程式設計師的基本**能力,今天給大家一起學習一下如何判斷單鏈表是否有環。

那麼如何判斷乙個單鏈表是否有環呢?(這個好像是谷歌的面試題目)先說一下演算法思想:

我們可以設定兩個指標分別叫做slow和fast,遍歷這個鍊錶,其中讓slow指標每次走一步,而fast指標則每次走兩步。大家想一下,如果鍊錶有環會出現什麼情況,鍊錶有環肯定在某乙個時刻這兩個指標會指向同乙個節點,也就是說如果出現slow.data == fast.data表示鍊錶有環(前提是這個鍊錶的各個節點的資料域都不相同);那麼什麼情況下是沒有環的呢?鍊錶如果沒有環那麼fast指標會先到達鍊錶的末尾,此時鍊錶肯定是不存在環的。演算法的思路很簡單,下面給出具體的**實現: 

package cn.cqupt.linked;

public class checklinkloop

node(int data)

node(int data,node next) }

public static boolean isloop(node head)

while(slow.next != null)

// 如果slow的資料域和fast的資料域相同,則表示有環

if(slow.data == fast.data)

// slow指標走一步,fast走兩步

slow = slow.next;

fast = fast.next.next;

//如果fast走到最後為空,表示沒有環

if(fast == null)

} return false;

} public static void main(string args)

}

java 判斷單鏈表是否有環

兩個指標h1,h2都從頭開始遍歷單鏈表,h1每次向前走1步,h2每次向前走2步,如果h2碰到了null,說明環不存在 如果h2碰到本應在身後的h1說明環存在 也就是發生了套圈 如果環不存在,一定是h2先碰到null 如果環存在,h2與h1一定會相遇,而且相遇的點在環內 h2比h1遍歷的速度快,一定不...

判斷單鏈表是否有環

1 如何判斷乙個鍊錶是不是這類鍊錶?2 如果鍊錶為存在環,如果找到環的入口點?解答 一 判斷鍊錶是否存在環,辦法為 設定兩個指標 fast,slow 初始值都指向頭,slow每次前進一步,fast每次前進二步,如果鍊錶存在環,則fast必定先進入環,而slow後進入環,兩個指標必定相遇。當然,fas...

判斷單鏈表是否有環

鍊錶結構 struct list 1 判斷單鏈表是否有環 採用追趕法,設定兩個指標p和q,從煉表表頭開始,p每一步走兩個節點,q每一步走乙個節點,如果鍊錶有環則p和q必相遇。如下 判斷鍊錶是否有環,時間複雜度o n 空間複雜度o 1 list hasloopinlist list head else...