反转链表OJ题

news2024/11/25 13:02:07

反转链表OJ题

在这里插入图片描述

文章目录

  • 反转链表OJ题
    • 题目:
    • 分析及代码实现:
      • 循环思想
      • 递归思想

题目:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分析及代码实现:

循环思想

①新开辟一个空链表,我们将原链表里的元素进行头插,实现反转。

struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode* newhead = NULL, *phead = head;
    while (phead)
    {
       struct ListNode* next = phead->next;//如果后找就找不到了。
       phead->next = newhead;
       newhead = phead;
       phead = next;
    }
    return newhead;
}

②在遍历链表时,将结点的next指向前一个指针,由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。

struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode* n1, *n2, *n3;
    if (head == NULL)
    {
        return NULL;
    }
    else
    {
        n1 = NULL, n2 = head, n3 = head->next;
    while(n2)
    {
        n2->next = n1;
        n1 = n2;
        n2 = n3;
        if (n3)
        {
            n3 = n3->next;
        }
    }
    return n1;
    }
}

递归思想

首先想说一句题外话,如果大家在看一个递归的代码没有看懂时,一定要画图!!!
本题如果使用递归的话,其实会比较复杂,并且反而会增加空间复杂度,使空间复杂度变成O(n)
关键点在于如果想反转,把nk->nk+1反转,需要变成nk->next->next = nk。而且不要忘记把n1的next设置成NULL,否则可能会出现环形链表。

struct ListNode* reverseList(struct ListNode* head) {
    if (head == NULL || head->next== NULL) {
        return head;
    }
    struct ListNode* newHead = reverseList(head->next);
    head->next->next = head;
    head->next = NULL;
    return newHead;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1176188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试题:你知道 Java 中的回调机制吗?

文章目录 调用和回调机制1.同步调用2.异步调用3.回调 回调的种类同步回调例子 异步回调 调用和回调机制 在一个应用系统中, 无论使用何种语言开发, 必然存在模块之间的调用, 调用的方式分为几种。 1.同步调用 同步调用是最基本并且最简单的一种调用方式, 类A的方法a()调用类B…

LSTM缓解梯度消失问题

为何LSTM缓解梯度消失问题 为什么LSTM会减缓梯度消失? - 知乎 LSTM引入长短期记忆,cell state和hidden state,解决梯度消失关键是对长期记忆cell state的保留和更新 LSTM解决梯度消失的本质是在Cell state 的更新中引入输入门和遗忘门 通过…

Java 语言环境搭建

JDK 是一种用于构建在 Java 平台上发布的应用程序、Applet 和组件的开发环境,即编写 Java 程序必须使用 JDK,它提供了编译和运行 Java 程序的环境。 在安装 JDK 之前,首先要到 Oracle 网站获取 JDK 安装包。JDK 安装包被集成在 Java SE 中&a…

linux 启动引导找不到内核修复

问题现象 选中内核按e 看到引导内核信息 挂载ISO映像进入救援模式,查看boot目录 与 引导文件内容不一致 再次重启引导系统,按e 修改内核引导项与boot目录一致, crtl - x 继续执行 登录系统 mount /dev/sdm1 /mnt 挂载vfat 引导目录 纠…

Cannot run program “D:\c\IntelliJ IDEA 2021.1.3\jbr\bin\java.exe“

如果你的idea在打开后出现了这个故障 Cannot run program "D:\c\IntelliJ IDEA 2021.1.3\jbr\bin\java.exe" (in directory "D:\c\IntelliJ IDEA 2021.1.3\bin"): CreateProcess error2, 系统找不到指定的文件。 打开IDEA的设置 file --> settings --&…

ADS安装问题

1、已有老版本,需要安装新版本,自动跳过证书安装目录设置 解决办法(ADS2019-2023版本都适用): ADS2019安装细节以及需要避免的坑 2、安装报错 解决办法,删除C盘里面的隐藏文件Zero G Registry&#xff1…

倒计时丨3天后,我们直播间见!

倒计时3天,RestCloud 零代码集成自动化平台重磅发布 ⏰11 月 9 日 14:00,期待您的参与! 点击报名:http://c.nxw.so/dfaJ9

Banana Pi BPI-P2 Pro Rockchip RK3308开发板启动及设置

Banana -Pi BPi-P2 Pro 是一款采用RockChip Arm 处理器的新型开发板。 64 位四核 Arm Cotrex-A35,使用 RockChip RK3308512 GB DDR3(在这篇博文中,我的设备只有 256GB)8 GB 板载 eMMC 存储40 PIN GPI 和 12 PIN 侧(包…

深入分析常规ROS机器人如何使用Navigation导航包实现实时定位

本篇文章主要分析,常规的ROS机器人是如何使用Navigation导航包实现实时定位的,定位精度的决定性因素等内容,结构上分为详细介绍、概括总结、深入思考三大部分。 注:本文首发于古月居,原文链接如下: – htt…

Visual Studio Code将中文写入变量时,中文老是乱码问题

对于这个问题,我也是弄了很久才知道,编码格式的问题 在此之前我们要先下载个插件 照这以上步骤,最后按F6运行即可,按F6是利用我们刚刚下载的插件进行编译,唯一有一点不好就是,用这种插件运行的话&#xff…

Mean-Shift聚类方法

刘玉琪 跟随 出版于 台湾人工智能学院 一、说明 上一篇介绍了基于密度的分群方法——DBSCAN,本篇会介绍另一个分群方法——Mean Shift,与DBSCAN一样不需要预先知道欲分群的数量,而对于分群的形状也没有限制。 然而,这个方法是基…

使用Scrapy的调试工具和日志系统定位并解决爬虫问题

目录 摘要 一、Scrapy简介 二、Scrapy的调试工具 1、Shell调试工具 2、断点调试 三、Scrapy的日志系统 四、实例解析 1、启用详细日志 2、断点调试 3、分析日志 4、解决问题 五、代码示例 总结 摘要 本文详细介绍了如何使用Scrapy的调试工具和日志系统来定位并解…

0基础学习VR全景平台篇第118篇:利用动作录制器功能避免重复操作 - PS教程

上课!全体起立~ 大家好,欢迎观看蛙色官方系列全景摄影课程! 嗨,大家好。欢迎收看蛙色VR系列教程之PS利用动作记录器节约补地时间。 大家拍摄在补地的时候,利用插件选择输入输出选项的时候,每次重复操作…

完美解决RuntimeError: expected scalar type Long but found Float

文章目录 一、错误解释RuntimeError: expected scalar type Long but found Float二、错误分析三、解决办法总结 一、错误解释RuntimeError: expected scalar type Long but found Float RuntimeError:应为标量类型Long,但找到了Float 二、错误分析 我…

开源一个房屋租赁平台

前言 哈喽兄弟们,好久不见哦~ 最近整理了一下之前写过的一些小项目/毕业设计。发现还是有很多存货的,虽然这些项目普遍都写的比较简单,但想一想既然放在电脑里面也吃灰,那么还不如开源分享出去,没准还可以…

每日一题 --- 力扣318----最大单词长度乘积

这道题时间复杂度我感觉设置的不是很好,应该最好是有一个1000变成10000就行。 因为我在做这道题的时候被误导了,以为双重循环暴力判断一下也能过,因为1000*1000 *26的时间复杂度没有到1亿,那么我刚开始认为是能过的,结…

用Rust和Scraper库编写图像爬虫的建议

本文提供一些有关如何使用Rust和Scraper库编写图像爬虫的一般建议: 1、首先,你需要安装Rust和Scraper库。你可以通过Rustup或Cargo来安装Rust,然后使用Cargo来安装Scraper库。 2、然后,你可以使用Scraper库的Crawler类来创建一个…

海洋专用cmocean颜色包_共22种--全平台可用

海洋专用cmocean颜色包_共22种–全平台可用 往期推荐: Python语言_matplotlib包_共80种–全平台可用 Python语言_single_color_共140种–全平台可用 R语言_RColorBrewer包–全平台可用 R语言gplots包的颜色索引表–全平台可用 R语言中的自带的调色板–五种–全平台…

Python Tkinter快速入门

一、背景 接了一个小活,需要做一个比特币走势分析小工具,客户希望能安装在Mac上,考虑后决定采用Python的Tkintermatplotlib来做,今天我们就来了快速了解一下Tkinter。 二、Tkinter介绍 Tkinter是Tk的Python版本,而T…

Spring boot集成sentinel限流服务

Sentinel集成文档 Sentinel控制台 Sentinel本身不支持持久化,项目通过下载源码改造后,将规则配置持久化进nacos中,sentinel重启后,配置不会丢失。 架构图: 改造步骤: 接着我们就要改造Sentinel的源码。…