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用来记录翻转后的头结点。

浙公网安备 33010602011771号