截圖自官方
// 官方解法1
// while(head!=null)
// head=head.next;
// }
// return false;
// 這樣也行,都是利用了set.add的返回值
// while(head!=null) else return true;
// }
// return false;
// }
// 快慢指標,如果鍊錶中存在環,則快指標一定會「追上」慢指標。快的一次跨兩步,注意判斷空指標。空間複雜度o(1)。
// 時間複雜度,假設直線部分有n,則slow移動n次,進入環後假設有k個節點,最差情況first和slow差k步,但是每迭代一次他們的距離減1,因此k次迭代後一定追上:o(k+n)=o(n)
public boolean hascycle(listnode head)
listnode slow=head;
listnode fast=head.next;
while(slow!=fast)
slow=slow.next;
// 注意在前面判斷空指標
fast=fast.next.next;
}return true;}}
這個題一定注意那些引用型變數(例如listnode)在借助容器類來比較兩個物件是否相等(唯一與否)的細節:應該是只要沒有new乙個,進行add操作時傳的依舊是引用,那麼contains檢查時,也是用引用值來比較是否唯一:
hashsetset=new hashset();
person person1=new person(1);
boolean add1 = set.add(person1);
system.out.println(add1);/*true*/
boolean add2 = set.add(person1);
system.out.println(add2);/*false*/
boolean add3 = set.add(new person(1));
system.out.println(add3);/*true*/ system.out.println(set);/*[test.leetcode.person@61443d8f, test.leetcode.person@445b84c0]*/
141 環形鍊錶
給定乙個鍊錶,判斷鍊錶中是否有環。高階 你能否不使用額外空間解決此題?乙個快指標走兩步 乙個慢指標走一步 如果相遇就有環 不然沒環 class solution def hascycle self,head type head listnode rtype bool index1 head inde...
141 環形鍊錶
鏈結 給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例1輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。示例2 輸...
141 環形鍊錶
給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。1.首先想到...