判斷單鏈表是否有環,若有環輸出環的入口節點

2021-09-27 05:57:44 字數 1368 閱讀 7120

思路:

1、快慢引用 fast 一次跑兩個,slow一次跑乙個兩者相遇有環,但相遇點不一定是入口點,如何證明是不是入口點?  快路徑長度=2慢路徑長度

2、**實現

public class link> 

}return null;

}public void addhead(t value)else

}public void addtail(t value)else

}public void removehead()

headentry.setvalue(null);

headentry=headentry.getnext();

if(headentry==null)

}public void removetail()

if(headentry.getnext()==null)

tailentry.setvalue(null);//防止記憶體洩漏

//為尾巴找前驅

entrybeforetail=headentry;

for(;beforetail.getnext().getnext()!=null;beforetail=beforetail.getnext())

//找到尾巴前驅

tailentry=beforetail;

tailentry.setnext(null);//新尾部結點next=null

beforetail.setnext(null);

}public void removevalue(t value)

if(headentry.getvalue().compareto(value)==0)

return;

}//p儲存要刪結點的前驅結點

for(entryp=headentry;p.getnext()!=null;p=p.getnext())}}

public void show()

system.out.println();

}private int getlength()

return count;

}public entryiscircle()

slow=slow.getnext();

fast=fast.getnext().getnext();

}while (fast!=slow);

return slow;

}//輸出環的入口結點:當前鍊錶環的入口結點

public entrygetcirclemeetentry()

entryp=headentry;

entryq=meet;

while (p!=q)

return p;

}}

判斷單鏈表是否有環

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