用兩個指標,從頭節點開始遍歷,乙個指標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;
}
main方法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;
}
列印結果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 和上面的區別是如果有環,要返回環的入口結點,如果沒環就返回空 先假...