《劍指offer》刷題系列 (十四)反轉鍊錶

2021-10-07 05:17:26 字數 1421 閱讀 2531

定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出反轉後鍊錶的頭節點。

示例:輸入: 1->2->3->4->5->null

輸出: 5->4->3->2->1->null

我們的目的是反轉鍊錶,也就是把鍊錶每兩個相鄰節點之間的指向改變。我們能夠想到,如果有兩個指標分別指向這兩個相鄰節點,那麼很容易就能改變指向。

以鍊錶 1->2->3->4->5->null為例。

定義兩個指標pre和cur,假設pre和cur分別指向鍊錶中的第乙個節點和第二個節點。此時

現在我們的目標是讓pre和cur之間的方向改變,即 使得cur的下乙個節點就是pre,改變之後如下圖:

這一步就完成了。接下來需要移動兩個指標繼續遍歷,這個時候我們發現,當需要修改節點2和節點3之間的指向的時候,兩個指標都找不到節點3所在的位置了,因為cur.next已經改變。

怎麼辦呢,如果有乙個指標能夠儲存修改之前cur.next的值,就可以解決。我們試著再定義乙個指標tmp,讓它一開始指向節點3。

時間複雜度為o(n)

空間複雜度為o(1)

劍指offer系列之十四 反轉鍊錶

題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。思路如下 在遍歷鍊錶上的每個節點的時候,就修改其指標,當遍歷到最後乙個結點的時候,整個鍊錶就反轉完成了。所以需要建立三個變數 乙個是當前遍歷的結點,乙個是遍歷結點的前乙個結點,還有乙個是當前遍歷結點的下乙個結點。基於這種思路可以寫出如下的實現 ...

劍指Offer系列刷題筆記彙總

本系列文章為 劍指offer 刷題筆記。刷題平台 牛客網 刷題刷的比較慢,花費了兩個多月,終於將所有題目過了一遍,牛客網一共有66道題,這次刷題主要使用c 接下來會使用python重新過一遍,並對這些寫過的文章進行更新。同時,也會重新開始刷leetcode。github專案 分類二一 線性表 1 陣...

劍指Offer系列刷題筆記彙總

劍指offer 二 替換空格 劍指offer 二十七 字串的排列 劍指offer 三十四 第乙個只出現一次的字元 劍指offer 四十三 左旋轉字串 劍指offer 四十四 翻轉單詞順序序列 劍指offer 四十九 把字串轉換成整數 劍指offer 五十二 正規表示式匹配 劍指offer 五十三 表...