翻轉連結串列常用寫法
迴圈寫法
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *prev = nullptr, *next = nullptr, *now = head;
while(now) {
next = now->next;
now->next = prev;
prev = now;
now = next;
}
return prev;
}
};
因為最後now會移動到nullptr,所以需要返回prev
遞迴寫法
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if (!head || !head->next) {
return head;
}
ListNode* fa = reverseList(head->next);
head->next->next = head;
head->next = nullptr;
return fa;
}
};
注意邊界條件不僅僅是!head->next
還要加上!head
來應對輸入連結串列為空的情況,其他情況下只有一個特判條件都不會有問題;但是如果輸入連結串列為空,就會試圖訪問nullptr的next,導致runtime error。