leetcode 206 反转链表

一、题目描述

二、解题思路

整体思路

可以采用递归的方法来解决这个问题。

具体思路

函数实现的效果:reverseList函数用于将以head为头结点的链表反转,并返回新的头结点;

递归出口:如果链表为空,或者链表内只有一个元素,则无需反转,直接返回head

函数体

(1)第一步,先将head之后的结点反转,用newhead指针接收新的头结点,反转之前的链表如图1所示,反转之后的链表如图2所示。

(2)**第二步,将head指向的结点接到反转后的链表的尾部,并将head结点的指针域置为空。**完成该步骤的链表如下图所示:

(3)返回newhead即可。

三、代码实现

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;

        auto newhead=reverseList(head->next);
        head->next->next=head;
        head->next=nullptr;
        return newhead;
    }
};
相关推荐
纵有疾風起7 分钟前
C++——多态
开发语言·c++·经验分享·面试·开源
稚辉君.MCA_P8_Java9 分钟前
Gemini永久会员 Java实现的暴力递归版本
java·数据结构·算法
冯诺依曼的锦鲤20 分钟前
算法练习:差分
c++·学习·算法
有意义1 小时前
栈数据结构全解析:从实现原理到 LeetCode 实战
javascript·算法·编程语言
鹿鹿鹿鹿isNotDefined1 小时前
逐步手写,实现符合 Promise A+ 规范的 Promise
前端·javascript·算法
Mr_WangAndy1 小时前
现代C++模板与泛型编程_第4章_remove_all_sequence,integer_sequence,is_union
c++·c++40周年·c++标准库用法
封奚泽优1 小时前
下降算法(Python实现)
开发语言·python·算法
im_AMBER1 小时前
算法笔记 16 二分搜索算法
c++·笔记·学习·算法
高洁011 小时前
【无标具身智能-多任务与元学习】
神经网络·算法·aigc·transformer·知识图谱
leoufung1 小时前
逆波兰表达式 LeetCode 题解及相关思路笔记
linux·笔记·leetcode