LeetCode206. 反转链表
思路:使用双指针,一个指向当前节点cur,另一个指向当前节点的前一个节点prev。需要保存一下当前节点的下一个节点curnext(因为当前节点会变)。然后让当前节点指向他的上一个节点,再将prev和cur向后移动。当cur==nullptr说明走到链表尾,结束。
迭代法:
//迭代法:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* prev=nullptr;
ListNode* cur=head;
while(cur!=nullptr){
ListNode* curnext=cur->next;
cur->next=prev;
prev=cur;
cur=curnext;
}
return prev;
}
};
递归法:
//递归法:
class Solution {
public:
ListNode* newlist(ListNode* prev,ListNode* cur){
if(cur==nullptr)
return prev;
ListNode* next=cur->next;
cur->next=prev;
return newlist(cur,next);
}
ListNode* reverseList(ListNode* head) {
return newlist(nullptr,head);
}
};