java 判斷單鏈表是否有環

2021-07-30 09:17:25 字數 1075 閱讀 4381

兩個指標h1,h2都從頭開始遍歷單鏈表,h1每次向前走1步,h2每次向前走2步,如果h2碰到了null,說明環不存在;如果h2碰到本應在身後的h1說明環存在(也就是發生了套圈)。

如果環不存在,一定是h2先碰到null:

如果環存在,h2與h1一定會相遇,而且相遇的點在環內:h2比h1遍歷的速度快,一定不會在開始的那段非環的鍊錶部分相遇,所以當h1,h2都進入環後,h2每次移動都會使h2與h1之間在前進方向上的差距縮小1,最後,會使得h1和h2差距減少為0,也即相遇。

public class linkedlistnode 

} return false ;

} public static void main(string args)

system.out.println(isloop(list));

system.out.println(list.head.next.data);

system.out.println(list.size);

list.remove(1);

system.out.println(list.head.next.data);

system.out.println(list.head.next.next.data);

system.out.println(list.size);

}};class nodeentity

public nodeentity()

};class nodelist

public boolean contain(object data)

next = next.next ;

} return flag ; }

public boolean add(object data)

else

}public boolean remove(object data)

previous = current;

current = current.next;

}if(current == head) else

return flag;

}};

java判斷單鏈表是否有環

演算法和資料結構是面試考核的重點,其中經常問到單鏈表的問題,比如單鏈表的逆置 判斷單鏈表是否有環等問題,這些主要考察的程式設計師的基本 能力,今天給大家一起學習一下如何判斷單鏈表是否有環。那麼如何判斷乙個單鏈表是否有環呢?這個好像是谷歌的面試題目 先說一下演算法思想 我們可以設定兩個指標分別叫做sl...

判斷單鏈表是否有環

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