題目:如何判斷乙個單鏈表是否有環?有環的話返回進入環的第乙個節點的值,無環的話返回-1。如果鍊錶的長度為n,請做到時間複雜度o(n),額外空間複雜度o(1)。
給定乙個單鏈表的頭結點head(注意另乙個引數adjust為加密後的資料調整引數,方便資料設定,與本題求解無關),請返回所求值。
詳見lb7,只是返回值不同,是返回結點值或者-1。
普通方法,空間複雜度為o(1),使用hash表,將每個遍歷的物件放入到hash中,然後逐個向下遍歷,每遍歷乙個去hash表中尋找有無相同的物件;如果有就說明迴圈,即有環;注意,只要有環,總是能夠遍歷有相同的物件,環不可能無限大。如果pcur==null那麼顯然無環。
public class chkloop {
public int chkloop(listnode head, int adjust)
{//特殊的輸入
if (head==null) return -1;
//計算得到環中結點的數目
int nodesnumberofloop=this.nodesnumberofloop(head);
//如果沒有環,直接返回null
if(nodesnumberofloop==0) return -1;
//如果有環,並且已知環的結點數目為n,來找環的入口結點
listnode p1=head;
listnode p2=head;
//指標p1先走n步
for(int i=0;i
鍊錶判環練習
如何判斷乙個單鏈表是否有環?有環的話返回進入環的第乙個節點的值,無環的話返回 1。如果鍊錶的長度為n,請做到時間複雜度o n 額外空間複雜度o 1 給定乙個單鏈表的頭結點head 注意另乙個引數adjust為加密後的資料調整引數,方便資料設定,與本題求解無關 請返回所求值。弗洛伊德判環法,演算法證明...
鍊錶,迴圈鍊錶,雙向鍊錶,判環和入環點
總結鍊錶相關練習題 鍊錶在計算機中記憶體的分配是不連續的,但是每個節點都有乙個指向下乙個節點的next引用,雙向鍊錶還有乙個指向前乙個節點的prev引用 只要獲得鍊錶的頭,那麼剩下的元素都很容易獲取了。所以鍊錶的每個節點有2個組成部分,乙個是存放資料的資料域,乙個是指向前驅或後繼的引用。public...
鍊錶 鍊錶環問題總結
給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?1 如何判斷是否存在環?對於問題1,使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在環,fast遇到n...