【算法】递归系列:206.反转链表(两种递归实现)

目录

1、题目链接

2、题目介绍

3、解法

递归法(从前往后递归)

从后往前递归

4、代码

递归法(从前往后递归)

从后往前递归


1、题目链接

206.反转链表

2、题目介绍

3、解法

递归法(从前往后递归)

递归的过程中,记录下当前节点的下一节点,然后将当前节点的next指针指向前一节点,不断递归

从后往前递归

首先判断边缘,当head为空返回空,当head-》next为空就返回head即可,然后调用该函数递归下一个节点,这样就一直递归到最后一个节点,将最后一个节点的next指针指向前一个结点,一直这样递归,然后返回递归后的链表即可

4、代码

递归法(从前往后递归)

cpp 复制代码
/**
 * 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;
        //翻转,更新 反转链表 的头节点为head2
        head2->next = newhead;

        return reverse(head2, temp);

    }
        ListNode* reverseList(ListNode* head) {
            return reverse(NULL, head);
    }
};

从后往前递归

cpp 复制代码
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;
}
相关推荐
wzdark2 小时前
基于堆的优先队列实现原理与复杂度分析4
算法
彧azz4 小时前
图的存储结构详解:邻接矩阵的原理、实现与应用
开发语言·数据结构·学习·php
老王熬夜敲代码4 小时前
BLAKE3:最快的密码学哈希函数
算法·密码学·哈希算法
hansang_IR4 小时前
【题解】P4460 [CQOI2018] 解锁屏幕
c++·算法
见闻小天地5 小时前
简博斯JG-C系列彩色激光同轴位移计:摄像头模组对位与行程测量的技术价值观察
人工智能·算法
葫三生5 小时前
《论三生原理》神话学构想与“神话历史”理论、《古史中的神话》思路异同?
大数据·人工智能·科技·深度学习·算法
liliangcsdn6 小时前
因子分析指标概念与示例
算法·机器学习
SupL!7 小时前
LoftQ原理
算法
Navigator_Z8 小时前
LeetCode //C - 1240. Tiling a Rectangle with the Fewest Squares
c语言·算法·leetcode
稻米哟8 小时前
力扣100——双指针
算法·leetcode