141 環形鍊錶

2021-10-24 14:13:35 字數 1592 閱讀 7200

截圖自官方

// 官方解法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.首先想到...