leetcode 141 142 環形鍊錶及拓展

2021-08-28 19:30:58 字數 990 閱讀 1161

給定乙個鍊錶,判斷鍊錶中是否有環。

高階:

你能否不使用額外空間解決此題?

節點類:

class listnode 

}

(1)使用額外空間來判斷鍊錶中是否有環

思路:遍歷整個鍊錶,將每一次遍歷的節點存入set中,利用set存入相同元素返回false的特性,判斷鍊錶中是否有環。

public boolean hascycle(listnode head) 

head = head.next;

}return false;

}

由於遍歷,導致時間複雜度為o(n),由於使用了set集合,空間複雜度為o(n)。

(2)使用快慢指標。

思路:快慢指標都從頭節點開始,快指標一次走兩步,慢指標一次,如果慢指標能夠追趕上快指標,則證明鍊錶中有環。

public boolean hascylce2(listnode head) 

}return false;

}

如果鍊錶有環,找出環的入口節點。

思路:快慢指標的相遇點到環入口的距離等於頭節點到環入口的距離,那麼在頭節點和相遇點各設乙個相同步伐的指標,他們相遇的那個節點就是環入口。

public listnode getentrance(listnode head) 

}if (iscycle)

return slow;

}return null;

}

若煉表有環,求出環的長度。

思路:若煉表有環,得到環入口,然後讓指標指向環入口,指標遍歷完重新回到環入口的路程即環的長度。

public int getcylcelength(listnode head) }}

return length;

}

leetcode 141 142環形鍊錶

給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。雙指標法 兩...

鍊錶中是否有環141 142

判斷鍊錶中是否有環 設定兩個指標,乙個快乙個慢 每次慢的走一步,快的走兩步,如果相遇就說明有環 public boolean hascycle listnode head else return false return false 和上面的區別是如果有環,要返回環的入口結點,如果沒環就返回空 先假...

Leetcode 判斷有環鏈表的環長度 2

思路 當兩個指標相遇,證明鍊錶有環的時候,讓兩個指標從相遇點繼續迴圈前進,並統計前進的迴圈次數,直到兩個指標第2次相遇,此時,統計出來的前進次數就是環數。思考一下 假設兩指標分為為p1,p2,則指標p2每次比p1多走一步,兩者的速度差為1步,當兩個指標再次相遇,p2比p1多走了1圈,因此 環長 每一...