檢查單鍊錶中是否有環

2021-07-24 22:36:33 字數 1065 閱讀 1911

用兩個指標,從頭節點開始遍歷,乙個指標a每次走1步,乙個指標b每次都2步。

如果有環,兩個指標相遇前

b位於a後一位時,那麼a,b指標下次相遇。

b位於a後兩位時,那麼a,b指標下下次即將相遇。

建立鍊錶

public static node createlist(int max) 

} return firstnode; }

public static boolean setcycle()

return false;

}

判斷有無環

public static boolean iscycle(node firstnode) 

if (firstnode.next == null)

boolean firsttime = true;

node curnode1 = firstnode;

node curnode2 = firstnode;

while(curnode2 != null)

firsttime = false;

curnode1 = curnode1.next;

curnode2 = curnode2.next;

if (curnode2 == null)

curnode2 = curnode2.next;

} return false;

}

main方法

public static void main(string args) 

}

列印結果

判斷單鏈表中是否有環(迴圈鍊錶)

有環的定義 鍊錶的尾結點指向了鍊錶中的某個結點,如下圖所示 判斷是否有環,兩種方法 方法1 使用p q兩個指標,p總是向前走,但q每次都從頭開始走,對於每個節點看p走的步數和q是否一樣,如上圖所示 當p從6走到3時,共走了6步,此時若q從出發,則q只需要走兩步就到達3的位置,因而步數不相等,出現矛盾...

判斷鍊錶中是否有環

單向鍊錶中有環的話,如果我們對此鍊錶進行遍歷,則將無窮盡。因此有必要判斷乙個單向鍊錶是否有環。假如乙個單向鍊錶中存在環,如下圖 乙個小矩形代表鍊錶中的乙個節點 虛線箭頭代表中間有無數節點。先說演算法,然後再來證明演算法的正確性。鍊錶的頭指標為h if null h null h next 頭指標為空...

鍊錶中是否有環141 142

判斷鍊錶中是否有環 設定兩個指標,乙個快乙個慢 每次慢的走一步,快的走兩步,如果相遇就說明有環 public boolean hascycle listnode head else return false return false 和上面的區別是如果有環,要返回環的入口結點,如果沒環就返回空 先假...