11 判斷單鏈表是否有環

2022-05-10 10:42:10 字數 1399 閱讀 7313

判斷單鏈表是否有環: 

這裡也是用到兩個指標,如果乙個鍊錶有環,那麼用乙個指標去遍歷,是永遠走不到頭的。 

因此,我們用兩個指標去遍歷:first指標每次走一步,second指標每次走兩步,如果first指標和second指標相遇,說明有環。時間複雜度為o (n)。 方法

//

方法:檢測單鏈表是否有環

public

boolean

hascycle(node head)

node first =head;

node second =head;

while (second != null

) }

return

false

; }

完整版**:(包含測試部分)

public

class

linklistcycle

else

}//方法過載:向鍊錶中新增結點

public

void

add(node node)

if (head == null

) else

}//方法:遍歷鍊錶(列印輸出鍊錶。方法的引數表示從節點node開始進行遍歷

public

void

print(node node)

current =node;

while (current != null

) }

class

node

public

intgetdata()

public

void setdata(int

data)

public

node getnext()

public

void

setnext(node next)

}//方法:檢測單鏈表是否有環

public

boolean

hascycle(node head)

node first =head;

node second =head;

while (second != null

) }

return

false

; }

public

static

void

main(string args)

listcycle.add(listcycle.head);

//將頭結點新增到鍊錶當中,於是,單鏈表就有環了。

system.out.println(listcycle.hascycle(listcycle.head));

}}

判斷單鏈表是否有環

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