目录
1、题目链接
2、题目介绍
3、解法
递归法(从前往后递归)
从后往前递归
4、代码
递归法(从前往后递归)
从后往前递归
1、题目链接
206.反转链表
2、题目介绍
3、解法
递归法(从前往后递归)
递归的过程中,记录下当前节点的下一节点,然后将当前节点的next指针指向前一节点,不断递归
从后往前递归
首先判断边缘,当head为空返回空,当head-》next为空就返回head即可,然后调用该函数递归下一个节点,这样就一直递归到最后一个节点,将最后一个节点的next指针指向前一个结点,一直这样递归,然后返回递归后的链表即可
4、代码
递归法(从前往后递归)
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* reverse(ListNode* newhead, ListNode* head2){//从前向后 ,进行翻转递归//newhead 翻转链表之后的“新头节点”//head2 剩余链表的头节点if (head2 == NULL)return newhead;//temp存储原链表ListNode* temp = head2->next;//翻转,更新 反转链表 的头节点为head2head2->next = newhead;return reverse(head2, temp);}ListNode* reverseList(ListNode* head) {return reverse(NULL, head);}
};
从后往前递归
class Solution {
public:ListNode* reverseList(ListNode* head) {if(head==NULL)return NULL;if(head->next==NULL)return head;ListNode*pre=reverseList(head->next);head->next->next=head;//让后一个节点指向自己head->next=NULL;return pre;
}