翻转链表常用写法

翻转链表常用写法

循环写法

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。

posted @ 2024-10-17 15:15  Gold_stein  阅读(3)  评论(0编辑  收藏  举报