这题也不难,就是我被有个地方坑住了,就是最初的prev我还单独开了一块空间并且赋值了,后来我发现直接赋值为nullptr不就好了吗。
还有递归,可能是经验不足,一直在想怎么用题目给的函数(只有一个参数)来完成,结果后面发现是自己再单独写函数,向右多少个参数都行。
具体的逻辑就是在进入下一节迭代或递归前传入当前值和上一次的值(即cur和cur-next)。然后每一次把当前值的next变为prev即可。
迭代的方法:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* curNode = head;
ListNode* nextNode;
ListNode* prevNode = nullptr;
while (curNode != nullptr) {
nextNode = curNode->next;
curNode->next = prevNode;
prevNode = curNode;
curNode = nextNode;
}
return prevNode;
}
};
递归的方法:
class Solution {
public:
ListNode* reverse(ListNode* prev, ListNode* cur) {
if (cur == nullptr)
return prev;
ListNode* temp = cur->next;
cur->next = prev;
return reverse(cur, temp);
}
ListNode* reverseList(ListNode* head) {
return reverse(nullptr, head);
}
};



