具体思想见YXC题解
递归写法:
用老板思维----我要把一个任务交给一个员工(函数) ,你想的不是这个过程是什么,而是想要这个员工要为你办成什么事,
在函数递归时,要想清楚这个函数操作完后,会把这个链表变成什么样,且它的返回值是什么,再想下把当前这个点怎么接进去即可。
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if (!head || !head->next) return head;
auto tail = reverseList(head->next);
head->next->next = head;
head->next = NULL;
return tail;
}
};
迭代写法:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if (!head || !head->next) return head;
auto a = head, b = a->next;
while (b) {
auto c = b->next;
b->next = a;
a = b, b = c;
}
head->next = NULL;
return a;
}
};
递归版本更详细解释:UP主–滚滚爱抱大腿