java創(chuàng)建鏈表 鏈表是否有環(huán)?
鏈表是否有環(huán)?單鏈表有一個(gè)環(huán),這意味著單鏈表中某個(gè)節(jié)點(diǎn)的下一個(gè)指針字段指向鏈表中該節(jié)點(diǎn)之前的一個(gè)節(jié)點(diǎn),從而在鏈表的末尾形成一個(gè)環(huán)結(jié)構(gòu)。有幾種方法可以判斷鏈表是否有鏈接。判斷一個(gè)鏈表中是否有環(huán)?首先設(shè)置
鏈表是否有環(huán)?
單鏈表有一個(gè)環(huán),這意味著單鏈表中某個(gè)節(jié)點(diǎn)的下一個(gè)指針字段指向鏈表中該節(jié)點(diǎn)之前的一個(gè)節(jié)點(diǎn),從而在鏈表的末尾形成一個(gè)環(huán)結(jié)構(gòu)。有幾種方法可以判斷鏈表是否有鏈接。
判斷一個(gè)鏈表中是否有環(huán)?
首先設(shè)置兩個(gè)指針指向鏈的頭部,然后一個(gè)指針一次向前移動(dòng)一步,另一個(gè)指針一次向前移動(dòng)兩步。如果快速指針遇到null,則證明列表中沒有環(huán)。如果有一個(gè)環(huán),快速指針每次都會(huì)比慢速指針多走一步,最后兩個(gè)指針會(huì)相遇。(注意:這里,快速指針不會(huì)跳過慢速指針,也不會(huì)碰撞Bool judge(list*head){if(head==null){return false//no ring}list*pfast=headlist*pslow=headwhile(pfast next!=null&p上一步!=null){pfast=pfast next pslow=pslow next
我想這段代碼應(yīng)該檢查鏈表中是否有環(huán)。當(dāng)兩個(gè)指針相遇時(shí),表示鏈表中有環(huán)。建議只聯(lián)系單子,不要看這么復(fù)雜的東西,手寫遍歷倒什么的好。
代碼是有上下文的,你不能只看一句話就能全部理解。如果查看循環(huán)語句的結(jié)束條件,至少應(yīng)該查看循環(huán)中執(zhí)行的操作。
當(dāng)鏈表長度為偶數(shù)時(shí),遍歷到尾部,fast指向null,但循環(huán)不結(jié)束,否則會(huì)做出判斷。此時(shí)將報(bào)告段落錯(cuò)誤。