反转链表(单向链表)

news2024/9/28 1:19:19
声明

该系列文章仅仅展示个人的解题思路和分析过程,并非一定是优质题解,重要的是通过分析和解决问题能让我们逐渐熟练和成长,从新手到大佬离不开一个磨练的过程,加油!

原题链接

反转链表备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N6B9https://leetcode.cn/problems/reverse-linked-list/

算法分析

问题转换:反转链表 <=> 反转节点 <=> 节点前驱和后继的指向交换

问题细化:

(1)变量:需要有一个指针cur指向链表头节点,负责遍历链表;需要有一个临时变量pre用于存储cur所指向节点的前驱节点;需要有一个临时变量temp用于存储cur所指向节点的后继节点。

(2)逻辑主体:

①temp = cur.next;

②cur.next = pre;

③pre = cur;

④cur = temp;

具体的交换过程示例如图1,图2。

图1
图2
代码示例(C#)
public ListNode ReverseList(ListNode head) 
{
    if(head == null) return null;
    ListNode cur, temp, pre;
    cur = head;
    pre = null;
    while(cur != null)
    {
        temp = cur.next;
        cur.next = pre;
        pre = cur;
        cur = temp;
    }
    return pre;
}
算法解说

        对于这道题,我们希望能够在原链表的基础上直接去实现链表的反转从而减少不必要的内存开销,对于链表的反转实际上就是对链表上的每一个节点进行反转。这里我们针对双向链表和单向链表的节点反转分别进行讲解。

        对于双向链表而言节点的反转就是改变前驱和后继指针的指向,让前驱指针指向原本后继指针指向的节点以及让后继指针指向原本前驱指针指向的节点。而对于单向链表而言只存在前驱和后继指针中的一个,但是它的节点反转与双向链表本质上是一样的。

        实际上双向链表中单个节点反转的过程与数组中两个不同位置的元素进行交换的过程相似,数组中元素的交换需要临时存储其中一个元素,避免在交换过程中元素被覆盖或丢失,那么对于节点反转也是如此,我们需要临时存储前驱指针指向的节点或者后继指针指向的节点,但是对于单向链表而言二者都需要进行临时存储。

        接下来将思路转换为代码需要明确变量和逻辑主体。本题是针对单向链表的反转,所以我们需要三个变量,一个变量用于临时存储前驱指针指向的节点,一个变量用于指向当前节点,还有一个变量用于临时存储后继指针指向的节点。逻辑主体则是从链表头节点开始依次反转当前节点的前驱和后继指向,同时要注意结束条件。

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

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

相关文章

搭建Web服务器并用cpolar发布至公网访问

本地电脑搭建Web服务器并用cpolar发布至公网访问 文章目录 本地电脑搭建Web服务器并用cpolar发布至公网访问前言1. 首先在电脑安装PHPStudy、WordPress、cpolar2. 安装cpolar&#xff0c;进入Web-UI界面3. 安装wordpress4. 进入wordpress网页安装程序5. 利用cpolar建立的内网穿…

【OpenGauss源码学习 —— 执行算子(hash join 算子)】

执行算子&#xff08;hash join 算子&#xff09; 连接算子hash join算子ExecInitHashJoin函数HashJoinState结构体TupleTableSlot 结构体JoinState结构体PlanState结构体ExecInitHashJoin函数部分代码介绍 ExecHashJoin函数调试信息 ExecEndHashJoin函数ExecReScanHashJoin函数…

Tween.js使用指南demo

案例&#xff1a; 小球的运动数字的自增 demo <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title&g…

网络连接(3次握手和4次挥手)

在进行3次握手和4次挥手传输数据时&#xff0c;都可能会出现丢包的情况&#xff0c;推荐看出现丢包问题的情况以及解决方法 一.为什么要进行3次握手&#xff1f; 在进行网络连接时&#xff0c;需要3次握手 3次握手的初心就是两方面&#xff1a; 1.投石问路&#xff0c;验证通…

df -h

df -h 命令用于查看磁盘占用的空间 Filesystem&#xff1a;表示该文件系统位于哪个分区&#xff0c;因此该列显示的是设备名称&#xff1b; Used&#xff1a;表示用掉的磁盘空间大小&#xff1b; Available&#xff1a;表示剩余的磁盘空间大小&#xff1b; Use%&#xff1a;磁盘…

国内小厂操刀,16G显存神卡只要599,老外急眼了

这年头&#xff0c;电脑配置 DIY 见怪不怪&#xff0c;你可曾听闻显卡规格 DIY&#xff1f; 前不久国外网友整出的 16G 显存 RTX 3070、国内大佬魔改的 22G 显存 RTX 2080Ti。 这些可都是官方从未发布过的船新版本。 显存容量无伤翻倍&#xff0c;关键还能不同批次搭配组合&a…

【严重】jeecg-boot/积木报表基于SSTI的任意代码执行漏洞

漏洞描述 JeecgBoot 是一款开源的的低代码开发平台&#xff0c;积木报表是其中的低代码报表组件。 JeecgBoot 受影响版本中由于积木报表 /jeecg-boot/jmreport/queryFieldBySql Api 接口未进行身份校验&#xff0c;使用 Freemarker 处理用户用户传入的 sql 参数&#xff0c;未…

微服务-Nacos(配置管理)

配置更改热更新 在Nacos中添加配置信息&#xff1a; 在弹出表单中填写配置信息&#xff1a; 配置获取的步骤如下&#xff1a; 1.引入Nacos的配置管理客户端依赖&#xff08;A、B服务&#xff09;&#xff1a; <!--nacos的配置管理依赖--><dependency><groupId&…

微服务-Nacos(注册中心)

Nacos是SpringCloud的一个功能非常强大的组件&#xff0c;想比eureka的功能更加丰富 官方的nacos简介 Nacos&#xff08;全称&#xff1a;Naming and Configuration Service&#xff09;是一个开源的动态服务发现、配置管理和服务管理平台。它由阿里巴巴集团开发并贡献给开源…

【高危】企业微信私有化2.5-2.6.93版本后台API未授权访问漏洞

漏洞描述 企业微信私有化2.5.x版本及2.6.930000版本以下后台中存在接口未授权访问漏洞&#xff0c;攻击者通过访问/cgi-bin/gateway/agentinfo接口可获得Secret&#xff0c;从而利用开放API获取企业通讯录等敏感信息及企业微信内应用权限。 漏洞名称企业微信私有化2.5-2.6.93…

案例20 基于Spring Boot+Redis实现学生信息按学号存储案例

1. 案例需求 基于Spring BootRedis实现学生信息按学号存储和取出功能&#xff0c;数据存储至Redis。 2. 创建Spring Boot项目 创建Spring Boot项目&#xff0c;项目名称为springboot-redis01。 3. 选择依赖 ​pom.xml文件内容如下所示&#xff1a; <?xml version"…

微信网页授权错误提示:redirect_uri 参数错误10003

如图网页授权域名也需要配置下&#xff0c;出现此问题是因为只配置了JS接口安全域名

即拼七人拼团模式:解决传统微商模式中的“人脉少”问题

许多各类企业都在为如何去引流用户、留存用户而烦恼&#xff0c;近期也有一些初创企业以及直销类型的朋友&#xff0c;咨询拼团对大众来说并不陌生&#xff0c;从多多的崛起开始&#xff0c;各种拼团活动就一直在我们的视野中浮现&#xff0c;对于这种算不上新颖&#xff0c;比…

opencv进阶09-视频处理cv2.VideoCapture示例(打开本机电脑摄像头)

视频信号&#xff08;以下简称为视频&#xff09;是非常重要的视觉信息来源&#xff0c;它是视觉处理过程中经常要处理的一类信号。实际上&#xff0c;视频是由一系列图像构成的&#xff0c;这一系列图像被称为帧&#xff0c;帧是以固定的时间间隔从视频中获取的。获取&#xf…

C语言刷题指南(一)

&#x1f4d9;作者简介&#xff1a; 清水加冰&#xff0c;目前大二在读&#xff0c;正在学习C/C、Python、操作系统、数据库等。 &#x1f4d8;相关专栏&#xff1a;C语言初阶、C语言进阶、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &am…

递归算法详解

概述 递归算法&#xff0c;不断调用本身&#xff0c;每调用一次在内存中添加一层&#xff0c;不断地叠加到最底层&#xff0c;直到遇到返回值&#xff0c;然后从最底层一层层的返回到最顶层 举例 public static void main(String[] args) {// System.out.println(fibbonacciF…

一篇文章教会你搭建私人kindle图书馆,并内网穿透实现公网访问

搭建私人kindle图书馆&#xff0c;并内网穿透实现公网访问 在电子书风靡的时期&#xff0c;大部分人都购买了一本电子书&#xff0c;虽然这本电子书更多的时候是被搁置在储物架上吃灰&#xff0c;或者成为盖泡面的神器&#xff0c;但当亚马逊发布消息将放弃电子书在中国的服务…

如何通过本地搭建wamp服务器并实现无公网IP远程访问

文章目录 前言1.Wamp服务器搭建1.1 Wamp下载和安装1.2 Wamp网页测试 2. Cpolar内网穿透的安装和注册2.1 本地网页发布2.2 Cpolar云端设置2.3 Cpolar本地设置 3. 公网访问测试4. 结语 前言 软件技术的发展日新月异&#xff0c;各种能方便我们生活、工作和娱乐的新软件层出不穷&…

《cpolar内网穿透》外网SSH远程连接linux(CentOS)服务器

本次教程我们来实现如何在外公网环境下&#xff0c;SSH远程连接家里/公司的Linux CentOS服务器&#xff0c;无需公网IP&#xff0c;也不需要设置路由器。 视频教程 [video(video-jrpesBrv-1680147672481)(type-csdn)(url-CSDN直播https://live-file.csdnimg.cn/release/live/…

使用netstat查询网络连接状态、端口信息

1、netstat作用 netstat 命令用于显示各种网络相关信息&#xff0c;如网络连接&#xff0c;路由表&#xff0c;接口状态 (Interface Statistics)&#xff0c;masquerade 连接&#xff0c;多播成员 (Multicast Memberships) 等等。 2、常见参数 -a (all)显示所有选项&#xff…