链表之单链表的反转总结

单链表的反转是常见的面试题目。本文总结了2种方法。

1 定义

单链表node的数据结构定义如下:

class ListNode {int val;ListNode next;ListNode(int x) {val = x;next = null;}
}

2 方法1:就地反转法

2.1 思路

把当前链表的下一个节点pCur插入到头结点dummy的下一个节点中,就地反转。

dummy->1->2->3->4->5的就地反转过程:

dummy->2->1->3->4->5
dummy->3->2->1->4->5
dummy->4>-3->2->1->5
dummy->5->4->3->2->1

2.2 解释

1初始状态


2 过程

pCur是需要反转的节点。

  1. prev连接下一次需要反转的节点
  2. 反转节点pCur
  3. 纠正头结点dummy的指向
  4. pCur指向下一次要反转的节点

伪代码

1 prev.next = pCur.next;
2 pCur.next = dummy.next;
3 dummy.next = pCur;
4 pCur = prev.next;


3 循环条件

pCur is not null

2.3 代码

// 1.就地反转法public ListNode reverseList1(ListNode head) {if (head == null)return head;ListNode dummy = new ListNode(-1);dummy.next = head;ListNode prev = dummy.next;ListNode pCur = prev.next;while (pCur != null) {prev.next = pCur.next;pCur.next = dummy.next;dummy.next = pCur;pCur = prev.next;}return dummy.next;}

2.4 总结

  • 1个头结点,2个指针,4行代码
  • 注意初始状态和结束状态,体会中间的图解过程。

3 方法2:新建链表,头节点插入法

3.1 思路

新建一个头结点,遍历原链表,把每个节点用头结点插入到新建链表中。最后,新建的链表就是反转后的链表。

3.2 解释

1 初始状态

3 方法2:新建链表,头节点插入法

3.1 思路

新建一个头结点,遍历原链表,把每个节点用头结点插入到新建链表中。最后,新建的链表就是反转后的链表。

3.2 解释

1 初始状态




2 过程

pCur是要插入到新链表的节点。

pNex是临时保存的pCur的next。

  1. pNex保存下一次要插入的节点
  2. 把pCur插入到dummy中
  3. 纠正头结点dummy的指向
  4. pCur指向下一次要插入的节点

伪代码

1 pNex = pCur.next
2 pCur.next = dummy.next
3 dummy.next = pCur
4 pCur = pNex

3 循环条件

pCur is not null

3.3 代码

// 2.新建链表,头节点插入法public ListNode reverseList2(ListNode head) {ListNode dummy = new ListNode(-1);ListNode pCur = head;while (pCur != null) {ListNode pNex = pCur.next;pCur.next = dummy.next;dummy.next = pCur;pCur = pNex;}return dummy.next;}

3.4 总结

  • 1个头结点,2个指针(包含一个临时保存节点的pNex),4行代码
  • 注意初始状态和结束状态,体会中间的图解过程。





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

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

相关文章

封神!Win11内置杀软被评为免费最佳

微软 Windows Defender 预装在 Windows 10 和 Windows 11 操作系统上。根据最新报告显示:Windows Defender 是 2021 年最好的防病毒软件(杀毒软件)之一。近日,位于德国的 IT 安全研究机构 AV-TEST 发布了针对 Windows 10 操作系统…

redis协议

为什么80%的码农都做不了架构师?>>> 利用gdb调试redis-server 在客户端redsi-cli,输入 gdb在下面函数处打入断点: 执行read函数后,查看buf中的内容,如下: 可见,客户端发送的指令&am…

佛门重地,不适合搞这种事!!

1 快教教我!▼2 佛门重地,不适合搞这种事(素材来源网络,侵删)▼3 来自中国的圣诞老人(素材来源网络,侵删)▼4 有被内涵到,谢谢▼5 江山代有才人出(素材来…

Git之如何解决sourceTree已经pull全部下来但是本地没有更新的问题

今天用sourceTree好奇怪,我pull下来了同事的代码,但是本地项目没有,如下图 日志上面是显示已提交了同事的代码。 然后下面是本地的UserDao.java文件 死活也找不到 解决方法: 我先是从git 上面clone一份代码下来, 发现这…

WPF关键帧动画

动画与关键帧的区别本章介绍关键帧动画之前, 首先需要讲解一下关于WPF当中基础动画与本章所讲的关键帧动画的区别。视频地址: WPF扩展合集_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili普通动画WPF基础动画当中, 我们熟悉的From/To/By驱动的动画, 主要在两个值之间创建过渡效果, 如下图…

Mac怎么不能拷贝文件到U盘

2019独角兽企业重金招聘Python工程师标准>>> 在日常生活中,我们常常需要把一些文件拷贝的U盘保存。但是一些使用MAC的用户,有时会遇到无法拷贝的情况。今天我们就来给大家介绍介绍MAC怎么不能拷贝文件到U盘,以及面对这种情况我们应…

最漂亮的女生

转载于:https://blog.51cto.com/6254695/1071754

dockerfile文件名_Linux云计算教程全套视频合集:Dockerfile详解(一)

我们可以把刚才的对容器的所有操作命令都记录到一个文件里,就像写更脚本程序。之后用 docker build 命令以此文件为基础制作一个镜像,并会自动提交到本地仓库。这样的话镜像的构建会变的透明化,对镜像的维护起来也更加简单,只修改…

Android之放大镜实现的两种方式

public class ShaderView extends View {private final Bitmap bitmap;private final ShapeDrawable drawable;// 放大镜的半径private static final int RADIUS 80;// 放大倍数private static final int FACTOR 3;private final Matrix matrix new Matrix();public ShaderV…

他把数学书当小说看,初中没毕业却敢自荐中科大数学研究生,现在天才都这么狂妄了吗?...

全世界只有3.14 % 的人关注了爆炸吧知识他的脑子不太像人脑太聪明了今天,超模君来介绍一位看数学书像看小说一样的天才吧。他是初中没毕业,靠自学8年,便成为文 革后第一个被中科大破格录取的数学研究生。他只坚持做了10年数学研究&#xff0c…

微软RPA工具Power Automate Desktop

什么是RPARPA(机器人流程自动化)系统是一种应用程序,它通过模仿用户在电脑上的操作方法, 实现自动化操作流程,协助人在计算机、手机等计算设备中完成重复的工作流任务。Power Automate Desktop2021年3月2日,Microsoft终于宣布面向…

MS UC 2013-2-Deploy Microsoft Exchange Server 2013-4-Post-Installation Tasks

Blog:http://dynamic.blog.51cto.com MSN:LiuJinFengmsn.com QQ:316190099《MS UC 2013 -系列》博文:1) 以TechNet Library为技术资料原型。2) 以0-《统一沟通-微软-实战》为基础。3) 以1-《统一沟通-微软-技巧》为参照。4&#x…

作为一个程序员,进步完全取决于自己

2015-12-14 我曾经在Hacker News网站上读过一篇帖子的评论,其中一个年轻的程序员说他们不想呆在那些只会让思想陈旧的老程序员离开而不是对他们再次培训的公司里,因为他明白,有一天他们也会这样。 也许这个人的本意是好的,但是他…

如何优雅地向导师/老板表示:“上周工作没什么进展”?

全世界只有3.14 % 的人关注了爆炸吧知识学生时代最怕导师问进度实验数据有了吗?结论有了吗?社畜时最怕老板问进度客户签合同了吗方案改出来了吗重点从来都不是被问,而是没什么进展还要硬着头皮汇报应对这种情况小编总结了三句口诀:反客为主&…

Android之如果解决Android studio项目里面的类名不能重命名

问题:改类名修改不了 今天师傅要我给那个在activity里面不规范的类名,类名是SearchUser.改成SearchUserActivity,发现改不了出了一下问题,如下图 如何解决的: 点击下面的(85:56)行&#xff0c…

python葡萄酒数据集_利用python分析红葡萄酒数据

在本次分析中,我使用了随机森林回归,并涉及数据标准化和超参数调优。在这里,我使用随机森林分类器,对好酒和不太好的酒进行二元分类。首先导入数据包:importnumpy as npimportpandas as pdimportmatplotlib.pyplot as …

Codeforces 365C - Matrix(hash + yy)

题意:给定你一个数串s,再给你一个 a ,问你在矩阵d(第i,j个元素为si*sj)有多少个小矩形的和为a 解题思路:可知 a (s[x] s[x1] ....s[y])* (s[p]s[p1]....s[q]); 我们只需要枚举各字串的和…

耗时3年,集齐102位中国摄影师,央视这部纪录片BBC也无法超越......

全世界只有3.14 % 的人关注了爆炸吧知识地球上已知的植物有三十多万种,其中十分之一生长在中国。这些植物不仅为中国带来福祉,还不断迁徙到世界各地。在人类的不懈努力下,它们又获得了新的姿态,为不同的文明带来不一样的色彩。《影…

十五天精通WCF——第十一天 如何对wcf进行全程监控

说点题外话,我们在玩asp.net的时候,都知道有一个叼毛玩意叫做“生命周期”,我们可以用httpmodule在先于页面的page_load中 做一些拦截,这样做的好处有很多,比如记录日志,参数过滤,全局登录验证等…

Android之MVP 模式:简单易懂的介绍方式

转载:https://segmentfault.com/a/1190000003927200 Android MVP Pattern Android MVP 模式1 也不是什么新鲜的东西了,我在自己的项目里也普遍地使用了这个设计模式。当项目越来越庞大、复杂,参与的研发人员越来越多的时候,MVP 模…