Java怎么实现链表的反转
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章主要讲解了"Java怎么实现链表的反转",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java怎么实现链表的反转"吧!import java.u
千家信息网最后更新 2025年12月01日Java怎么实现链表的反转
这篇文章主要讲解了"Java怎么实现链表的反转",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java怎么实现链表的反转"吧!
import java.util.ArrayList;import java.util.Stack; /** * 链表的反转 */public class ReverseLinkedList {/** * 非递归地反转链表: * * 特点:没有进行节点间的两两反转,而是采用依次插入到新链表的方式来实现反转。 * * 过程:遍历一次链表,将遍历的节点依次插入到新链表的头部即可实现链表的反转。 * * 复杂度:时间复杂度为O(N),辅助的空间复杂度为O(1) * * [@param](https://my.oschina.net/u/2303379) head * * [@return](https://my.oschina.net/u/556800) 将反转后的新链表的头节点返回。 */public static Node reverseByInsertToNewList(Node head) { Node current = head; // 正在遍历的节点 Node next = null; // 下一个要遍历的节点 Node newHead = null; // 新链表头节点的引用(指向新链表头节点的指针) while (null != current) { next = current.next; // 将下一个要遍历的节点暂存起来 /** * 将当前节点放到新链表的头部: * 1>将当前节点指向新链表的头部 * 2>更新newHead */ current.next = newHead; newHead = current; current = next; // 向后继续遍历 } return newHead;}/** * 递归地反转链表: * * 特点:从后往前两两反转。 * * 过程:递归地将当前节点(current)和它的后继节点(current.next)反转。 * * 注意: * 1)最后一个节点没有后继节点,故最后一个节点不需要进行反转操作,只需将最后一个节点(作为新链表的头节点)直接返回即可。 * 2)当前节点为链表倒数第二个节点时,开始第一次的反转操作。 * 3)每次的反转操作都不会对新链表的头节点造成影响,只是将新的头结点返回而已。 * * 解析: * 1)将 A->B->C->D 反转的操作可以分为: * 1>将 C->D 反转 ==> A->B->C D->C->null * 2>将 B->C 反转 ==> A->B D->C->B->null * 3>将 A->B 反转 ==> D->C->B->A->null * * 2)将 A->B 反转的操作: * 1>将B的后继节点指向A, 即 B.next = A 即 A.next.next = A * 2>将A的后继节点设为null, 即 A.next = null * * [@param](https://my.oschina.net/u/2303379) current * * [@return](https://my.oschina.net/u/556800) 将反转后的新链表的头节点返回。 */private static Node reverseByRecursion(Node current) { if (null == current) { // 若该链表为空链表,则直接返回 return current; } if (null == current.next) { // 当前结点是尾结点时,直接返回。注:链表的尾节点即新链表的头节点 return current; } Node newHead = reverseByRecursion(current.next); // newHead是链表的尾节点,即新链表的头节点。 // 反转操作:将current和current.next进行反转,即:将当前节点放到新链表的尾部,故在递归的过程中新链表的头部不会变。 current.next.next = current; current.next = null; // 将新链表的头节点返回。 return newHead;}// -------/** * 利用栈的先进后出特性来完成链表的反转。 * * 时间复杂度为O(N),辅助的空间复杂度也为O(N) * * [@param](https://my.oschina.net/u/2303379) head * @return 将反转后的新链表的头节点返回。 */public static Node reverseWithStack(Node head) { Stack stack = new Stack(); while (null != head) { stack.push(head); head = head.next; } return stack.peek();}/** * 反转双向链表 * * 复杂度:时间复杂度为O(N),辅助的空间复杂度为O(1) * * @param head * @return 将反转后的新链表的头节点返回。 */public static Node reverseBidirectionalList(Node head) { if (null == head) { // 若该链表为空链表,则直接返回 return null; } Node current = head; Node next = null; Node newHead = null; while (null != current) { // 反转 next = current.next; // 将当前节点的后继节点暂存起来 current.next = current.prev; current.prev = next; if (null == next) { // 若下一个要遍历的节点为null,则说明已经到达链表的尾部,此时current即链表的尾节点 newHead = current; } current = next; // 继续向后遍历 } return newHead;}// -------/** * 将链表从头到尾依次打印出来 * * @param head */public static void print(Node head) { ArrayList 感谢各位的阅读,以上就是"Java怎么实现链表的反转"的内容了,经过本文的学习后,相信大家对Java怎么实现链表的反转这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
节点
复杂
复杂度
后继
双向
头部
递归
指向
时间
空间
结点
过程
学习
辅助
内容
尾部
特点
表头
从头到尾
从头
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
关于网络安全的知识50字
网络安全攻防演练督导工作
网络安全防线向更高水平
网络安全应聘什么职位
软件开发app费用
vs使用数据库
朱利安尼担任网络安全顾问
网络安全进校园主题班会演讲稿
神武4新服务器等级限制
手机软件开发学什么
前锦网络技术销售是干嘛的
产品服务生态 网络安全
教育信息管理系统无法连接服务器
hfs分享服务器
靠谱的网络安全服务哪里有
互联网科技新评
如何删除腾讯服务器个人微信数据
曼曼视频连接服务器失败
戴尔服务器保修卡片
广州pc软件开发收费
西峡app软件开发公司
认证服务器出错是什么原因
软件开发公司 英语
网络安全研究归纳为哪四个方面
软件开发技能工艺工作流程
闲置云服务器托管
星分贝互联网科技
北京猎杰互联网科技
摄像头照相软件开发
苹果手机连接服务器出错什么情况