經典演算法題 兩兩反轉鍊錶中的節點

2022-07-08 06:57:13 字數 1042 閱讀 9663

來自leetcode-24

這道題我們需要使用三個指標,除了指向相鄰的兩個元素外,還需要指向相鄰兩個元素的前乙個元素

在開頭設定好pre和pre.next,然後執行迴圈,把a,b挑出來,然後把next指標進行調換,即把a-b換成b-a,同時更新pre指標

首先看到最後 return self.next ,可以看到思路是想把 self 當做鍊錶的頭指標使用的(注意:頭指標 phead 與傳入的引數 head 是不同的,head 是第乙個結點,而 phead.next == next )。用頭指標有什麼好處呢?因為我們讓頭指標的 next 域(phead.next)永遠指向第乙個結點,就是避免最後返回的時候找不到第乙個結點了。

那麼作者為什麼可以 pre, pre.next = self, head 這樣寫呢?因為 self 是這個類的乙個物件,所以在類定義的時候可以在任何地方,給 self 增加新的屬性。所以這行**應該理解為,pre 指向 self(雖然 self 不是乙個 listnode 型別的物件,但它只要有乙個 next 就可以了),同時為 pre(同時也是為 self,它們是一樣的現在)增加乙個 next 屬性,這個 next 屬性指向第乙個結點 head。

3. 明白上面之後,這裡就好辦了。在第一次 while 迴圈的時候,pre.next 被賦值為 b(也就是原來第二個結點,轉換為變成了第乙個,也就成為了新鍊錶的第乙個結點。如果原來是[1,2,3,4],那麼現在就是[2,1,3,4],這個 self.next 就是指向 2 這個結點)。所以最後只要返回 self.next 就得到了答案。

兩兩交換鍊錶中的節點

給乙個鍊錶,兩兩交換其中的節點,然後返回交換後的鍊錶。樣例 給出 1 2 3 4,你應該返回的鍊錶是 2 1 4 3。遞迴方式 交換p 和 p.next 結點 swaphead p.next swaphead.next p definition for singly linked list.publ...

兩兩交換鍊錶中的節點

給乙個鍊錶,兩兩交換其中的節點,然後返回交換後的鍊錶。給出1 2 3 4,你應該返回的鍊錶是2 1 4 3。首先這個鍊錶只能交換偶數個資料,如果有奇數個資料則最後乙個資料不進行交換。做乙個迴圈將資料兩個兩個的交換,每交換完一次都要往後迭代。definition for singly linked l...

兩兩交換鍊錶中的節點

題目 給乙個鍊錶,兩兩交換其中的節點,然後返回交換後的鍊錶。樣例 給出1 2 3 4,你應該返回的鍊錶是2 1 4 3。思路 兩兩交換節點乍一看好像就是交換兩個節點的位置,仔細想一想交換的是數值,兩個一組兩個一組,只要head next不是null,或者head不是null就可以交換倆個節點的值,h...