入门级题解:https://blog.csdn.net/m0_46663240/article/details/122602996
一刷代码随想录,再次遇到这个反转链表,当时可是难到我了,现在做还是比较轻松的,
思路及关键点:
1.有两部分,一部分是已经反转的List1,另外是还未反转的List2,我们要做的就是,独立出没有反转的List2的第一个节点Node1,使Node1->next = List2.
2.刚开始的List1是nullptr.
就这两步,完成本题。
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* cur = nullptr;
while(head){
ListNode* temp = head->next;
head->next = nullptr;
head->next = cur;
cur = head;
head = temp;
}
return cur;
}
};
半递归解法
class Solution {
ListNode* dummyNode = new ListNode(0);
ListNode* pre = dummyNode;
public:
ListNode* reverseList(ListNode* head) {
recrion(head);
return dummyNode->next;
}
void recrion(ListNode* cur){
if(cur == nullptr)return;
recrion(cur->next);
cur->next = nullptr;
pre->next = cur;
pre = pre->next;
}
};
之所以是半递归,是我感觉我的递归只用来一个反转的作用,要得到答案比较麻烦,要是直接输出反序结果就比较简单了/