算法通关村第二关—手写链表反转(青铜)

news2024/11/13 3:32:49

       链表反转的三种方式

一、建立虚拟头结点辅助反转

 为了方便反转,可以创建一个ans结点,让ans.next = head,然后后面的结点一次插入到ans.next
 在下图中,对(1->2->3->4->5)进行反转,可以创建ans,让ans.next = node(1),然后依次把2,3,4,5结点插入到ans后面
截屏2023-11-27 23.14.04.png

//方法1:虚拟结点法
public static ListNode reverseList(ListNode head){
ListNode ans new ListNode(-1);
ListNode cur head;
while(cur != null){
	ListNode next = cur.next;
	cur.next = ans.next;
	ans.next = cur;
	cur = next;
}
return ans.next;
}

二、直接操作链表实现反转

 有时候面试官会让你使用难度更高一些的,不借助虚拟结点的方式来反转链表
 观察反转前后的指针指向,思考如何进行反转

截屏2023-11-27 23.31.26.png

 在初始状态中,cur指向的是旧链表的头结点,prev指向新链表的头结点,next指向下一个要调整的结点。在变化过程中,cur结点会转移到新结点中,然后prev指到cur到结点,cur指到next的结点。
核心代码如下:
ListNode next = curr.next;
curr.next = prev;
prev = curr;
curr = next;

截屏2023-11-27 23.31.46.png

public ListNode reverseList(ListNode head){
ListNode prev = null;
ListNode curr = head;
while(curr != null){
	ListNode next = curr.next;
	curr.next = prev;
	prev = curr;
	curr = next;
}
return prev;
)

三、拓展(递归)

 还不太懂递归的写法,等以后学得深了再看看。

public ListNode reverseList(ListNode head){
if (head = null || head.next = null) return head;
ListNode newHead = reverseList(head.next);
head.next.next = head;
head.next = null;
return newHead;
}

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

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

相关文章

easyexcel指定sheet页动态给行列加背景色

easyexcel,有多个sheet页,某些sheet页的行、列动态需要加背景色 import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.write.handler.CellWriteHandler; import com.alibaba.excel.write.m…

Spring Cloud,注册中心,配置中心,原理详解

文章目录 Spring Cloud,注册中心,配置中心,原理详解谈谈我个人对 spring Cloud 的理解 注册中心Eureka:服务搭建小结 Ribbo - 负载均衡1. 负载均衡流程2. 负载均衡策略 nacos注册中心1. 配置集群1. 创建 namespace2. 配置命名空间…

MATLAB实战 | 不同形式的三维曲面图

通常,MATLAB中绘制三维曲面图,先要生成网格数据,再调用mesh函数和surf函数绘制三维曲面。若曲面用含两个自变量的参数方程定义,则还可以调用fmesh函数和fsurf函数绘图。若曲面用隐函数定义,则可以调用fimplicit3函数绘…

RuoYi若依前后端分离框架二次开发基础项目

一键改标题:点击ruoyi-ui(ctrlshiftr)改完重启项目 连接本地数据库 全智能生成开发 新建maven项目 菜单创建---栏目创建 无权限删除时:去掉要删除的菜单权限 子菜单:新增 代码生成器cv进去 后端: 前端: 完成&#x…

人工智能与供应链行业融合:预测算法的通用化与实战化

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 让我们一起深入探索人工智能与供应链的融合,以及预测算法在实际应用中的价值!🔍🚀 文章目录 前言供应链预测算法的基本流程统计学习模型与机…

顺子日期(14)

顺着日期 public class Main {public static void main(String[] args) {int res 0;//2022年int[] days new int[] {31,28,31,30,31,30,31,31,30,31,30,31};//31,28,31,30,31,30,31,31,30,31,30,31//一三五七八十腊//构造2022年每一天的日期yyyymmddStringBuffer date new…

现在的教师工资这么低了?

最近刷v站看到个帖子t/991351 ,程序员转行回乡当老师月薪才2000,现在的教师工资这么低了?月薪3000都不到。 搜索了下,现在有些地方开始#教师全员竞聘上岗# https://weibo.com/1784473157/NpUd3esCv ,曾经的铁饭碗也可能…

【开发问题解决方法记录】02.dian

想重命名表名,但是失败了,提示[0A000][3001] ORA-03001: 未实施的功能 Position: 0. 获取到USER_ID和ROLE_ID但是无法新增成功 问题出在哪里捏? 报错:ORA-06502: PL/SQL: 数字或值错误 : 字符到数值的转换错误 展示的是…

不受平台限制,Sketch 网页版震撼登场

Sketch 是一种基于 Mac 的矢量图形编辑器,可用于数字设计。其主要功能包括无损矢量编辑、完美像素精度和数百个插件同步功能,可导出预设和代码。它是目前流行的页面交互协作设计工具。但是 Sketch 最大的缺点是对 Windows/PC 用户不友好。严格来说&#…

笔记十七、认识React的路由插件react-router-dom和基本使用

react-router 分类 web使用 react-router-dom native使用 react-router-native anywhere(使用麻烦) react-router 安装 yarn add react-router-dom main.jsx import React from "react"; import ReactDOM from "react-dom/client"…

宋仕强论道之华强北曼哈商城(十二)

宋仕强论道之华强北曼哈商城(十二): 讲了华强北万佳百货以后要讲旁边配套的商场。在1995年,在万佳百货旁边开了一个曼哈商城,名字叫曼哈是因为老板是美国纽约曼哈顿留学回来的,是一个叫张虹女孩子。华强北曼…

DS图—图的最短路径/Dijkstra算法【数据结构】

DS图—图的最短路径/Dijkstra算法【数据结构】 题目描述 给出一个图的邻接矩阵,输入顶点v,用迪杰斯特拉算法求顶点v到其它顶点的最短路径。 输入 第一行输入t,表示有t个测试实例 第二行输入顶点数n和n个顶点信息 第三行起,每行…

C/C++字节对齐

C/C字节对齐 C/C字节对齐1.G_PACKED2.1 pack(push)2.2 pack(1) 全部例子 C/C字节对齐 1.G_PACKED #ifdef __GNUC__#define G_PACKED( __Declaration__ ) __Declaration__ __attribute__((packed)) #else#define G_PACKED( __Declaration__ ) __pragma( pack(push,1)) __Decla…

万宾科技第四代可燃气体监测仪的作用

燃气作为一种重要的能源已在居民生活、工业生产和商业活动等领域得到了广泛的应用。但是与之而来的便是各种各样的燃气管网的安全问题,其中燃气管网泄漏成为了城市生命线建设中亟待解决的安全隐患。因此采取切实有效的措施来保障燃气管网的安全运行,应用…

龙芯loongarch64服务器编译安装pyarrow

1、简介 pyarrow是一个高效的Python库,用于在Python应用程序和Apache Arrow之间进行交互。Arrow是一种跨语言的内存格式,可以快速高效地转移大型数据集合。它提供了一种通用的数据格式,将数据在内存中表示为表格,并支持诸如序列化和分布式读取等功能。 龙芯的Python仓库安…

Python爬虫之代理IP与访问控制

目录 前言 一、代理IP 1.1.使用代理IP的步骤 1.2.寻找可用的代理IP 1.3.设置代理IP 1.4.验证代理IP的可用性 二、访问控制 2.1.遵守Robots协议 2.2.设置访问时间间隔 2.3.多线程爬取 总结 前言 在进行Python爬虫过程中,代理IP与访问控制是我们经常需要处…

Codebeamer—软件全生命周期管理轻量级平台

产品概述 Codebeamer涵盖了软件研发的生命周期,在一个整合的平台内支持需求管理、测试管理、软件开发过程管理以及项目管理等,同时具有IToperations&DevOps相关的内容,并支持变体管理的功能。对于使用集成的应用程序生命周期管理&#xf…

C++-详解C++11中的左值,左值引用,右值,右值引用

目录 一.C语言中对左值和右值的定义 1.左值 2.右值 二.左值引用和右值引用 1.左值引用 2.右值引用 3.左值引用给右值取别名 4.右值引用给左值取别名 三.移动构造和移动赋值 1.移动赋值 2.移动拷贝 ​编辑​编辑 四.完美转发 1.先看一道试题: 一.C语言中对左值和…

C#实体类与XML互转以及List和DataTable转XML的使用

引言 在C#开发中,数据的存储和传输是非常常见的需求。使用XML作为数据格式有很多优点,例如可读性强、易于解析等。而实体类、List和DataTable是表示数据模型的常用方式。本文将介绍如何在C#中实现实体类、List和DataTable与XML之间的相互转换&#xff0c…

【100个Cocos实例】编码不规范,接手泪两行...

点击上方亿元程序员关注和★星标。 引言 规范编码,从文件头部注释规范做起。 头部注释规范是一种在代码文件开头添加注释信息的做法,通常用于描述文件的基本信息、作者、创建日期、修改历史等。 这有助于团队成员更好地理解和维护代码。 本文将介绍一…