leetcode刷題, 總結,記錄, 備忘142

2021-07-05 04:22:46 字數 1512 閱讀 2925

leetcode142

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,2表示。乙個每次走一步,乙個每次走2步。在圖中這個情況下,慢指標需要走3步才能到達迴圈開始的節點處,而此時的快指標已經進入了迴圈。由圖中可知,此時1指標才剛到迴圈的開始處,而2指標已經在迴圈裡走了3步。那該如何得到走多少步之後2個指標才能重合呢。假設需要走x步才能重合,現在1指標在迴圈中的位置為0,2指標為3。那麼0+x 和 2x+3 的值對迴圈圈的長度,即4,取模之後的結果應該是相同的,表示處在環上的某乙個相同位置上。考慮到2指標由於步長是2,很有可能在走過x步之後已經繞了一圈,所以這裡我做個假設,做了個等式,x = 2x + 3 - 4, 即x = 4 - 3。就是使用環長減去頭節點到環開始處的長度,這個步數的計算方法是我在別人部落格裡看來的,但是人家寫的時候並沒有做太多解釋,前文中的那些推論都是我自己畫圖琢磨時的一些感悟,若有錯誤,輕噴。由此可得到需要走多少步,2個指標會重合,之後你就會神奇的發現,由於環長是4,x為1,慢指標和快指標走了一次之後就重合了,此時,慢指標如果需要再走到,環頭,還需要4-x步,即3步,但是各位有沒發現x就是由4-3,環長減去頭節點到環頭的長度得來的,所以忽然發現,重合點的位置到環頭的距離與頭節點到環頭的距離是一樣的,由此就可以輕鬆的找到環頭節點的指標了。之後你也會發現在環中重合一次之後,下一次重合是5步之後,即x加上環長4。我覺得這題還真需要好好畫圖推演,找到相應的定理才好理解,,,但是其中的緣由是什麼我也併步太清楚,只是自己做出了一些推斷。

可能有 比較細心的同學會說,如果是環的長度比頭節點到環頭的距離小呢,想得到x步就是負數了嗎,,我也考慮到這個問題了,只需將環長翻倍即可,乘2不夠就乘3,然後再減,即可得到需要多少步可以重合。具體的圖就不畫了,畫的太醜了。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

listnode * slow = head;

listnode * fast = head;

while (slow->next && fast->next)

if (slow == fast)

return fast;}}

return null;}};

leetcode刷題,總結,記錄,備忘 226

leetcode226題。invert binary tree 倒置二叉樹。想不到這題還有個梗,挺有意思的。我一開始自作聰明,想用乙個棧乙個佇列來做,用中序遍歷,把節點push進棧中,把節點的指push進佇列中,遍歷完之後,分別從棧頂和佇列頂拿出節點和數值,賦值。一開始想著感覺還挺對的,遞交了幾次都...

leetcode刷題,總結,記錄,備忘83

leetcode83.for example,given1 1 2,return1 2.given1 1 2 3 3,return1 2 3.不想說什麼了,比較簡單的題目,大爺的我提了6,7遍才過,因為中間有個流程一直疏忽了,如果當前項值域和下乙個結點的值域相同的話,在將下乙個結點刪掉,即連到下乙個...

leetcode刷題,總結,記錄,備忘202

leetcode202 credits special thanks to mithmatt and ts for adding this problem and creating all test cases.還是比較簡單的題目,雖然我提的次數比較多,又拉低了通過率,真是無情。每次計算如果得到結果...