206. 反转链表

题目

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
这里的头结点不是空白,是第一个有值的结点。

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *l, *cur, *r;
        l = nullptr; cur = head;
        while(cur) {
            r = cur->next;
            cur->next = l;
            l = cur;
            cur = r;
        }
        return l;
    }
};

另一种方法,递归:

class Solution3 {
private:
    ListNode* res;
    void solve(ListNode* pre, ListNode* p) {
        if (!p) {return ;}
        res = p;
        solve(p, p->next);
        p->next = pre;
    }
public:
    ListNode* reverseList(ListNode* head) {
        solve(nullptr, head);
        return res;
    }
};

这里的res用来记录翻转后的头结点。

posted @ 2026-03-27 22:06  saulstavo  阅读(12)  评论(0)    收藏  举报