面試題 反轉鍊錶

2021-10-04 03:22:22 字數 996 閱讀 3665

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

思考題:

樣例

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

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

​ 這道題使用迭代的思想很容易思考,我們只需要準備三個指標,分別是上乙個節點prev、當前節點currcurr的下乙個節點node

​ 通過遍歷整個鍊錶,沒到乙個節點,我們先儲存curr.nextnode,再將curr.next賦給prev,也就改變了curr的指向,隨後我們把currprev都後移一位即可(在原來的順序上,因為我們已經保留了node),當curr == null時,說明鍊錶已經到結尾了,我們返回prev即可

​ 遞迴版本如何思考呢,我們只需要思考一種情況,由於是遞迴實現,當遞迴到head節點時,我們需要遞迴函式返回的結果是乙個從head.next開始已經被反轉的鍊錶,所以我們只需要將head接到鍊錶的結尾,並將head.next指空即可

class solution 

return prev;}}

;

class solution 

};

class

solution

return prev;

}}

class

solution

}

面試題 反轉鍊錶

定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出反轉後鍊錶的頭節點。鍊錶節點定義如下 struct listnode int m nkey listnode m pnext 思路 額,一路遍歷下去,前後指向反過來,最後乙個節點就輸出。o n 的效率也應該是最優的了。答案如下 listnode r...

面試題 反轉鍊錶

面試題 反轉鍊錶 思路 要實現鍊錶反轉,需要調整鍊錶中指標方向,使鍊錶反轉後的頭結點為原鍊錶的尾結點。為了防止結點斷裂,需定義三個指標,分別指向當前遍歷的結點,它的前一結點以及後乙個結點。當然編寫 時要考慮到下列三點 防止程式崩潰 將思路用 實現為 slistnode node phead 當前結點...

面試題 反轉鍊錶

題目 輸入乙個鍊錶的頭結點,反轉該鍊錶,並返回反轉後鍊錶的頭結點。如下 include iostream using namespace std struct node 返回反向鍊錶的頭結點 node reserve node head return pre int main 正向遍歷鍊錶 node...