劍指offer 判斷單鏈表是否有環

2021-09-13 00:05:48 字數 545 閱讀 6850

給定乙個鍊錶,判斷鍊錶中是否有環。

快慢指標法:

我們知道,假設乙個鍊錶有環,那麼它就永遠走不到頭。

設定有兩個指標,乙個快指標,乙個慢指標。其中,快指標一次遍歷兩個節點;慢指標遍歷乙個節點,它們都是從頭開始往後遍歷所有的節點。

如果鍊錶中沒有環,那麼快指標與慢指標都會先後遍歷完所有的節點。

如果鍊錶中有環,則快慢指標會進入環中直到某次的遍歷時相遇。一旦相遇,就證明該鍊錶中存在環。

package swordoffer;

import swordoffer.entrynodeofloop.listnode;

public class hascycle }

public static boolean hascycle(listnode node)

listnode quick = node;

listnode slow = node;

while(quick != null)

} return false;

}}

判斷單鏈表是否有環

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

判斷單鏈表是否有環

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