翻轉連結串列常用寫法

Gold_stein發表於2024-10-17

翻轉連結串列常用寫法

迴圈寫法

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。

相關文章