递归_反转链表_C++

一.题目解析

算法解析:1.循环

三指针法:prev,cur,next,然后cur指针指向prev实现反转,注意指针前进的顺序

代码实现

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* reverseList(ListNode* head) {
        ListNode* prev=nullptr;
        ListNode* cur=head;
        
        while(cur!=nullptr)
        {
            ListNode* next=cur->next;
            cur->next=prev;
            prev=cur;
            cur=next;
        }
        return prev;
    }
};

算法解析2:递归

思路1:

思路2:

递归代码实现

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* reverseList(ListNode* head) {
        if(head==nullptr||head->next==nullptr)return head;//边界情况

        ListNode*newhead= reverseList(head->next);//深度优先遍历
        head->next->next=head;
        head->next=nullptr;
        return newhead;
    }
};
相关推荐
代码改善世界1 小时前
【数据结构】从快速排序优化到外部文件归并排序
数据结构
CoderCodingNo1 小时前
【GESP】C++七级考试大纲知识点梳理 (3) 图论基础与遍历算法
c++·算法·图论
星辰_mya1 小时前
线上故障排查实战经验总结一
java·开发语言·jvm·面试
深蓝轨迹1 小时前
LeetCode105. 从前序与中序遍历序列构造二叉树
数据结构·算法
勇闯逆流河1 小时前
【Linux】Linux基础开发工具(git、dbg)
linux·运维·服务器·开发语言·c++·git
TracyCoder1231 小时前
LeetCode Hot100(63/100)——31. 下一个排列
数据结构·算法·leetcode
填满你的记忆1 小时前
JVM 内存模型详解:Java 程序到底是如何运行的?
java·开发语言·jvm
RDCJM2 小时前
Plugin ‘org.springframework.bootspring-boot-maven-plugin‘ not found(已解决)
java·前端·maven
DJ斯特拉2 小时前
SpringBoot项目的基本构建
java·spring boot·后端