地址:https://leetcode-cn.com/problems/reverse-linked-list/
思路:双指针 || 递归
一、双指针:从链表头结点p=head开始反转,需要先保存pi=p->next,再将p->next指向p本身,同时记录已反转链表的头结点head=p(而初始头结点为NULL),然后遍历到下一个节点即可
二、递归:思路相同,递归到下一节点,在将当前节点与其下一节点指针反转head->next->next=head,然后令head=NULL(使反转后的链表末节点->next=NULL)即可
Code 1 双指针:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==NULL) return head;
ListNode *p=head,*pi;
head=NULL;
while(p!=NULL){
pi=p->next;
p->next=head;
head=p;
p=pi;
}
return head;
}
};
Code 2 递归:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==NULL||head->next==NULL) return head;
ListNode *cur=reverseList(head->next);
head->next->next=head;
head->next=NULL;
return cur;
}
};