思路:遞歸到達尾節點,回溯時反轉指針。
reverse(node) { if (!node||!node->next) { head=node; return; } reverse(node->next); node->next->next=node; node->next=nullptr; }
思路:建立新頭節點,遍歷原鏈表,將每個節點摘下插入新頭之後。
while (cur) { nxt=cur->next; cur->next=newHead->next; newHead->next=cur; cur=nxt; }
方法 時間 空間 備註 遞歸 O(n) O(n) 棧 代碼簡潔,棧溢出風險 頭插法 O(n) O(1) 生產環境首選 常見錯誤
next(遞歸中 p->next=nullptr 必不可少)。nxt 導致鏈表斷裂。