每日OJ题_算法_递归③力扣206. 反转链表

news/2024/6/18 21:31:32 标签: 算法, leetcode, 链表, c++, 数据结构, 反转链表

目录

力扣206. 反转链表

解析代码


力扣206. 反转链表

206. 反转链表

LCR 024. 反转链表

难度 简单

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

/**
 * 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) {

    }
};

解析代码

这次循环迭代也写过了,且用循环更好,但练下递归:

左图就是把紫矿里的链表反转后链接到head,head再指向空,右图就是把链表看成一棵树。

/**
 * 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后面的都递归好
        head->next->next = head; // 让叶子结点指回去
        head->next = nullptr; // 为了统一步骤
        return newHead;

        // 循环迭代法
        /*ListNode *newHead = nullptr, *cur = head;
        while(cur)
        {
            ListNode *curNext = cur->next;
            cur->next = newHead; // 头插
            newHead = cur; // 往后走
            cur = curNext;
        }
        return newHead;*/
    }
};

http://www.niftyadmin.cn/n/5378884.html

相关文章

HTTP 响应状态代码

HTTP 响应状态代码 HTTP 响应状态代码指示特定 HTTP 请求是否已成功完成。 响应分为五类&#xff1a; 信息性回复 &#xff08; 100 – 199​)成功响应 &#xff08; 200 – 299​)重定向消息 &#xff08; 300 – 399​)客户端错误响应 &#xff08; 400 – 499​)服务器错误…

指纹识别描述

指纹由于其终身不变性、唯一性和方便性&#xff0c;几乎已成为生物特征识别的代名 词。通常我们说的指纹就是人的手指末端正面皮肤上凸凹不平的纹线&#xff0c;纹线规律地排列 形成不同的纹型。而本节所讲的指纹是指网站CMS 指纹识别、计算机操作系统及W eb 容器的指纹识别等…

SpringBoot RabbitMQ收发消息、配置及原理

今天分析SpringBoot通过自动配置集成RabbitMQ的原理以及使用。 AMQP概念 RabbitMQ是基于AMQP协议的message broker&#xff0c;所以我们首先要对AMQP做一个简单的了解。 AMQP (Advanced Message Queuing Protocol) is a messaging protocol that enables conforming client a…

Anaconda、conda、pip、virtualenv的区别

① Anaconda Anaconda是一个包含180的科学包及其依赖项的发行版本。其包含的科学包包括&#xff1a;conda, numpy, scipy, ipython notebook等。 Anaconda具有如下特点&#xff1a; ▪ 开源 ▪ 安装过程简单 ▪ 高性能使用Python和R语言 ▪ 免费的社区支持 其特点的实现…

Resolving Low-Level Graphics Issues

Resolving Low-Level Graphics Issues 在远程操作其他工作站上的matlab的时候&#xff0c;无法显示仿真结果&#xff0c;但是在真实的工作站上操作的话又可以看到simulation的结果&#xff0c;并且远程的时候进行仿真&#xff0c;就会显示以下的错误提示&#xff1a; >>…

Node.js开发-会话控制

会话控制 1) 介绍2) cookie3) session4) session 和 cookie 的区别5) token 1) 介绍 所谓会话控制就是 对会话进行控制 HTTP 是一种无状态的协议&#xff0c;它没有办法区分多次的请求是否来自于同一个客户端&#xff0c; 无法区分用户 而产品中又大量存在的这样的需求&…

wayland(xdg_wm_base) client 使用 dmabuf 最简实例

文章目录 前言一、zwp_linux_dmabuf_v1 协议二、wayland client 使用 zwp_linux_dmabuf_v1 协议传递dma-buf代码实例1. wayland_dmabuf.c 代码实例2. xdg-shell-protocol.c 和 xdg-shell-client-protocol.h3. linux-dmabuf-unstable-v1-client-protocol.h 和 linux-dmabuf-unst…

openEuler 22.03 LTS 上源码安装 PostgreSQL 15

安装PostgreSQL 15 1 安装必要的依赖 #yum install -y readline-devel zlib-devel gcc2、下载源码 # wget https://ftp.postgresql.org/pub/source/v15.6/postgresql-15.6.tar.gz # tar -xzvf postgresql-15.6.tar.gz3 配置 # cd postgresql-15.6/ # ./configure4 编译安装…