Leetcode206:反转链表

news2025/2/3 19:02:28

一、题目

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

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

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

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

二、题解

1.头插法

构造一个新链表,从旧链表中取出节点,一个个插入到新链表的头部,最后就逆序了。
在这里插入图片描述

public static Node reverseList1(Node head) {
    //新链表的头节点
    Node node = null;
    //遍历旧链表
    while (head != null) {
        //每次都创建一个新节点,放在新链表的头部(当前链表的next是之前的node)
        node = new Node(head.value, node);
        //让旧链表的头指针往下移动一位
        head = head.next;
    }
    return node;
}
2.双指针
  • 1.因为要改变指针的方向,会丢失掉原本next的指针,所以让next元素先暂存起来:ListNode temp = head.next;
  • 2.改变cur指针的指向(head指针)head.next = pre;
  • 3.让pre和cur同时向后移动 pre = head; head = temp;
  • 4.当cur指向到null时,遍历完毕 head!=null
    在这里插入图片描述
public Node reverseList(Node head) {
    Node pre = null;
    while(head!=null){
        //把当前节点的后一个节点暂存到temp
        Node temp = head.next;
        head.next = pre;
        pre = head;
        head = temp;
    }
    return pre;
}
3.递归

通过递归调用每次让头指针往后移,即相当于执行了head = head.next
在递归内部的操作把指针的指向改变,为了防止循环引用,在改变完当前节点的指向后,还要把前一个节点的指针指为空。
image.png

public static Node reverseList(Node head) {
    if (head == null || head.next == null) {
        return head;
    }
    //返回最后的节点
    Node node = reverseList(head.next);
    head.next.next = head;
    head.next = null;
    return node;
}

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

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

相关文章

面试经典 150 题 -- 滑动窗口 (总结)

面试经典150题链接 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台 209 . 长度最小的子数组 思路 : 滑动窗口的思想,取ij0,向后遍历j,记录前缀和[l,r]为s,如果s>target,那么左端点向右移动,直到s…

net 一台路由器如何让两个不同网段的终端可以通信。

# 终端设备自己设置就行了 # 路由器的设置 The device is running! #################################################### <Huawei> Feb 1 2024 21:21:09-08:00 Huawei %%01IFPDT/4/IF_STATE(l)[0]:Interface GigabitEt hernet0/0/0 has turned into UP state. <…

Linux系统——防火墙

一、防火墙的认识 引言 安全技术 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全…

POI word操作,如何使表格单元格文本内容垂直/水平居中(两行代码解决)

垂直居中&#xff1a;cell本身就有垂直对齐的api&#xff0c;一行代码就够。 水平居中&#xff1a;一般方式行不通&#xff0c;网上苦找了许多方式&#xff0c;代码都太长了&#xff0c;&#xff0c;忒麻烦。于是我突发奇想&#xff0c;发现可以利用paragraph的水平居中对齐方…

Flask 入门3:Flask 请求上下文与请求

1. 前言 Flask 在处理请求与响应的过程&#xff1a; 首先我们从浏览器发送一个请求到服务端&#xff0c;由 Flask 接收了这个请求以后&#xff0c;这个请求将会由路由系统接收。然后在路由系统中&#xff0c;还可以挂入一些 “勾子”&#xff0c;在进入我们的 viewFunction …

小白水平理解面试经典题目_数组类Leetcode 412. Fizz Buzz【数学解法】

412 FizzBuzz 小白渣翻译&#xff1a; 给定一个整数 n &#xff0c;返回一个字符串数组 answer &#xff08;从 1 开始索引&#xff09;&#xff0c;其中&#xff1a; answer[i] “FizzBuzz” 如果 i 能被 3 和 5 整除。answer[i] “Fizz” 如果 i 能被 3 整除。answer[i]…

【gulp+jq+html】添加环境变量,并在js中使用(判断环境,更改api接口域名)+ 附gulpfile.js代码

参考博文&#xff1a; gulp分离环境 gulp中如何配置环境变量 gulp环境变量配置 1、安装cross-env插件 npm install cross-env -d2、package.json更改scripts "scripts": {"clean": "gulp clean","serve:test": "cross-env NODE…

IP协议(2) 和 数据链路层协议基础

IP协议续 1.路由选择 在复杂的网络结构中,我们需要找到一个通往终点的路线,这就是路由选择 举个例子:我们在没有手机导航之前,想去一个地方得是到一个地方问一下路的方式最终找到目的地 路由的过程,其实就是样子问路的过程 1.当IP数据包到达路由器的时候,会查看目的IP 2.路由器…

HAL库配置PWM模式

一、什么是PWM 脉冲宽度调制(PWM)&#xff0c;是英文“Pulse Width Modulation”的缩写&#xff0c;简称脉宽调制。通过控制高低电平在一个周期内的占比从而输出一定的电压。 向上计数原理介绍 ​PWM的一个周期 定时器从0开始向上计数 当0-t1段,定时器计数器TIMx_CNT值小于…

Springboot-前后端分离——第三篇(三层架构与控制反转(IOC)-依赖注入(DI)的学习)

本篇主要对ControllerServiceDAO三层结构以及控制反转&#xff08;IOC&#xff09;与DI&#xff08;依赖注入&#xff09;进行总结。 目录 一、三层架构&#xff1a; Controller/Service/DAO简介&#xff1a; 二、控制反转(IOC)-依赖注入(DI): 概念介绍&#xff1a; DOC与…

学校如何提升教学效率?这种方法要牢记!

随着教育信息化的发展&#xff0c;学校管理也逐渐借助先进的技术手段实现智能化、高效化。在线巡课系统作为其中的重要组成部分&#xff0c;为学校领导提供了便捷而有效的管理工具。 客户案例 中小学校长办公室 在中小学校长办公室&#xff0c;校长通过在线巡课系统可以实时查…

js 设置、获取、删除标签属性以及H5自定义属性

1. 设置标签属性 使用setAttribute()(‘属性名’, ‘属性值’)方法可以添加、修改、删除属性。   下面的demo是为input添加、修改、删除value属性&#xff1a; 1.1. HTML <input type"text" class"input"> <input type"text" class…

apk反编译修改教程系列---修改apk的默认颜色 布局颜色 手机电脑同步演示【十】

往期教程&#xff1a; apk反编译修改教程系列-----修改apk应用名称 任意修改名称 签名【一】 apk反编译修改教程系列-----任意修改apk版本号 版本名 防止自动更新【二】 apk反编译修改教程系列-----修改apk中的图片 任意更换apk桌面图片【三】 apk反编译修改教程系列---简单…

centos7 安装 java17 安装 idea

删除旧版本的java或者说是自带的&#xff0c;免得干扰 查找java [wanglcentos7 java]$ rpm -qa|grep javajava-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64 javapackages-tools-3.4.1-11.el7.noarch tzdata-java-2020a-1.el7.noarch python-javapackages-3.4.1-11.el7.noarch …

获取响应请求头里的信息

如图所示这是一个导出excel的接口&#xff0c;后端响应头部&#xff0c;要获取Content-Disposition里的值&#xff0c; 由于命名问题&#xff0c;没有办法用res.Content-Disposition的方式获取它的值 按理来说使用res[Content-Disposition]就可以获取到&#xff0c;但是咩有&…

MySql主从同步,同步SQL_ERROR 1032解决办法

1.登录从库 mysql -u root -p 2.输入命令查看状态 SHOW SLAVE STATUS\G; 3.找到对应的错误数据位置 Slave_IO_Running: YesSlave_SQL_Running: NoReplicate_Do_DB: app_push_centerReplicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Tabl…

【C++】vector的简单使用和实现

vector就是我们之前数据结构学的顺序表&#xff0c;这篇博客就是说一说它的简单使用和底层实现 文章目录 简单使用模拟实现 简单使用 首先&#xff0c;我们看看它的构造函数 我们比较常用的也就是第二种&#xff0c;就是第一个参数是要存的数据个数&#xff0c;第二个是要填…

Linux系统Shell脚本-----------正则表达式 文本三剑客之---------grep、 sed

一、正则表达式 1.前言 正则表达式(regular expression)描述了一种字符串匹配的模式&#xff08;pattern&#xff09;&#xff0c;可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。在Linux中也就是代表我们定义的模式模板&…

HAL库硬件SPI点亮板载LCD屏幕

1、本节内容介绍 1.1、HAL库硬件SPI 在cubemx中的配置及注意事项; 1.2、HAL库SPI详解与结构介绍; 1.3、实现硬件SPI驱动板载ST7789显示屏,240*240像素&#xff1b; 源码地址&#xff1a;https://gitee.com/MR_Wyf/hal-cubemx-rt-thread/tree/hal_rttNano_st7789_menu/ 或者…

多线程互斥量进阶

问题 一个线程多次尝试获取同一个互斥量&#xff0c;会发生什么&#xff1f; 不同类型的互斥量 Linux 上的示例程序 死锁的概念 等待关系 线程所需资源被其他线程所持有&#xff0c;进而必须等待 (无法继续执行) 循环等待 当线程之间出现循环等待关系时&#xff0c;即&…