定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。
思考題:
樣例
輸入:1->2->3->4->5->null
輸出:5->4->3->2->1->null
這道題使用迭代的思想很容易思考,我們只需要準備三個指標,分別是上乙個節點prev
、當前節點curr
和curr
的下乙個節點node
通過遍歷整個鍊錶,沒到乙個節點,我們先儲存curr.next
給node
,再將curr.next
賦給prev
,也就改變了curr
的指向,隨後我們把curr
和prev
都後移一位即可(在原來的順序上,因為我們已經保留了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...