1.given a linked list, determine if it has a cycle in it.
follow up:
can you solve it without using extra space?
判斷乙個鍊錶是否有環
思路:通過定義乙個fast指標初始指向頭節點,每次走兩步;定義乙個slow指標初始指向頭節點,每次走一步。如果它們能夠相遇,那麼鍊錶中存在環。
/**
* definition for singly-linked list.
* struct listnode
* };
*/class solution
return false;
}};
2.given a linked list, return the node where the cycle begins. if there is no cycle, returnnull
.
note:do not modify the linked list.
follow up:
can you solve it without using extra space?
找到環的入口節點。
思路:1.利用第1題的思路,通過定義乙個fast指標初始指向頭節點,每次走兩步;定義乙個slow指標初始指向頭節點,每次走一步。找到它們在環中相遇的節點。
此時,slow指標走了x步,fast指標走了2x步。假設圓環中有n個節點,那麼2x - x = nr,也就是x = nr。r為大於0的整數。
2.假設從鍊錶的頭節點到圓環入口處經過了y個節點,那麼,慢指標在圓環中經過的節點數為x-y。
根據 x = nr,慢指標還需經過y個節點,即又一次回到圓環的入口處。
所以,重新定義乙個指標temp初始指向頭節點,與slow節點一起,每次走一步。temp與slow相遇,即為圓環入口處。
/**
* definition for singly-linked list.
* struct listnode
* };
*/class solution }}
return null;
}};
鍊錶 鍊錶環問題總結
給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?1 如何判斷是否存在環?對於問題1,使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在環,fast遇到n...
鍊錶環問題總結
給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?1 如何判斷是否存在環?對於問題1,使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在環,fast遇到n...
鍊錶環問題
給定乙個鍊錶,判斷該鍊錶中是否有環?如果有的話,環的長度是多少?環的入口是哪個節點?使用快慢指標策略,兩個指標都從頭指標出發,快指標每次走兩步,慢指標每次走一步。1.判斷鍊錶是否有環?如果快慢節點相遇,那麼鍊錶有環。2.如果有環,環的長度是多少?快慢指標相遇後,固定其中乙個指標 如快指標 不動,另乙...