單鏈表反轉思路

2021-10-05 07:56:32 字數 665 閱讀 2358

單鏈表反轉,就地反轉的思路,需要設定三個指標。pre,cur,next. 但是這三個指標第一次使用以及第一次分別指向那裡很關鍵。

如乙個鍊錶:1->2->3->4->5->6->null;此時鍊錶的最後乙個元素一定是等於null。因此當這個鍊錶反轉後,就應該是這樣:null<-1<-2<-3<-4<-5<-6. 所以先定義pre=null,也就是在鍊錶之外。cur指向當前head的第乙個節點如1位置。此時需要記錄cur->next位置,目的是下一輪迴圈需要把當前cur->next當成cur使用。然後pre和cur不停向後移動。知道cur==null結束所有動作。此時pre的指標就指向了6的位置,這個位置也是新的鍊錶的頭位置。**實現

listnode *

revertlist

(listnode* head)

/*走到這裡說明此時此刻cur==null,也就是說明最後一次cur->next此時等於null,也就是說最後一次cur=鍊錶的最後乙個節點。那麼在最後一次迴圈賦值中,cur=了他的下一位,pre移動到了最後乙個元素處。因此此時pre指標就是新鏈包的頭*/

return pre;

}這裡的關鍵是:只移動pre和cur 指標。next指標在迴圈裡面移動,while判讀的是cur指標,讓後pre指標第一次賦null很關鍵。不能一上來指向head位置。

單鏈表反轉

單鏈表反轉,可以用迴圈做,當然也可以遞迴 詳見 include includestruct node 3 1 4 6 2 1 1 3 4 6 2 2 4 1 3 6 2 3 6 4 1 3 2 4 2 6 4 1 3 5 迴圈反轉,即依次改動3個指標值,直到鍊錶反轉完成 比如,上面第 1 行到第 2...

反轉單鏈表

include stdafx.h include include using namespace std struct listnode typedef listnode plistnode typedef plistnode list list creatlist return head void...

單鏈表反轉

想起很早以前某次面試,面試官很嚴肅的要求我現場手寫單鏈表反轉的 哥虎軀一震,心想 不就需要要個臨時變數來記錄位址嗎,用得著這樣煞有介事?雖然在那之前我的確沒寫過這個程式,哈哈哈 當時我草草寫了十來行 面試官不等我完成,就直接拿過去開始問問題。不知道是不是因為抗壓能力不足,在面試官的不斷 盤問 下,哥...