Java 单向链表翻转
链表翻转的思路有很多,再此做个记录。
思路一:最简单的思路就是先遍历链表,逐一将链表里的节点放入到栈里面;然后在遍历栈,将栈里的元素在逐一出栈形成新的链表。主要是利用了栈的后进先出的特点。
public static ListNode reverseListNodeByStack(ListNode node) {Stack<ListNode> stack = new Stack<ListNode>();ListNode head = node;//链表入栈while(head!=null) {//当前要入栈的头部节点ListNode currentHead=head;//移动head指针,指向下一个节点head=head.next;//将当前头部节点的next设置为null,这样就单独将头部节点放入栈了,其子节点不会入栈currentHead.next=null;stack.push(currentHead); }ListNode newHead = stack.pop();//新链表的next节点ListNode currentNextNode=newHead;//出栈构成新链表while(!stack.isEmpty()) {ListNode popNode = stack.pop();currentNextNode.next=popNode;currentNextNode=popNode;}return newHead;}
思路二:
遍历链表,然后修改head.next的指向。每一次遍历都需要不断移动head指针 ,然后将新的head的next指向已经遍历过得节点就可以了:
/*** 链表翻转* @param node*/public ListNode reverseListNode(ListNode node) {//新链表的头部节点,刚开始肯定是nullListNode newHead = null;ListNode head=node;while (head != null) {//当前需要处理的链表ListNode oldHead= head; //移动head,head.next指的是链表中未处理的部分head = head.next;//让链表的第一个元素指向已经翻转的链表oldHead.next = newHead;//将oldHead作为newhead的头部newHead= oldHead;}//输出已完成翻转的链表return newHead;}
ListNode的代码如下,为了调试方便,特地重写了toString方法,用来打印链表的所有值:
public class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) {this.val = val;}ListNode(int val, ListNode next) {this.val = val;this.next = next;}public String toString() {String str=""+val;ListNode temp = next;while(temp!=null) {str+=temp.val;temp=temp.next;}return str;}
}
Java 单向链表翻转相关推荐
- JAVA单向链表实现
JAVA单向链表实现 单向链表 链表和数组一样是一种最常用的线性数据结构,两者各有优缺点.数组我们知道是在内存上的一块连续的空间构成,所以其元素访问可以通过下标进行,随机访问速度很快,但数组也有其缺点 ...
- java 单向链表 双向链表_java 单向链表与双向链表的实现
链表 单向链表 单向链表概念 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 这是一种物理结构,不是树那样的逻辑结构.链表和顺序表两种物理结构, ...
- java单向链表详解
1.概述 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始:链表是使用指针进行构造的列表:又称为结点列表,因为链表是由一个个结点组装起来的:其中每个 ...
- Java 单向链表和单向循环链表的代码实现
这个链表,以前上学的时候,学c语言,还是数据结构的时候,学过.也许也实现过吧.下面我就简单记录下这个链表的实现. 单向链表跟单向循环链表的差别就是:单向链表是有结束位的,指向null的时候,就到结尾了 ...
- Java 单向链表模拟
链表是有序的列表 链表是以节点的方式来存储的,各个节点不一定是连续存储的 分为带头节点的链表和没有头节点的链表 头节点不存放具体数据 单向链表: 其中每一个节点包含一个存储数据的data,一个指向下一 ...
- Java单向链表反转
要求 给出单链表的头节点 head ,要求反转链表,并返回反转后的链表. 实现原理 单向链表反转就是将链表的指针方向改变.由于单链表没有指向前一个结点的指针,所以,我们定义一个指向前一个节点的指针pr ...
- java单向链表中的头插法与尾插法
单链表属于数据结构中的一种基本结构,是一种线性结构,在此使用Java对其中的头插法以及尾插法进行解释.数据结构 首先定义好链表中的节点类: 其中,data表明节点所存放的数据,next表明指向下一节点 ...
- Java单向链表操作详解
/* 先定义一个Node类用来存储节点的值域和指针域 * 即当前节点中的值和后面节点的方法 * 在C中就是相当与定义一个结构体类型一个数据域和指针域的方法 */ class LNode{//这个写法已 ...
- java单向链表按顺序插入节点
实现步骤: 1.首先找到新添加的节点的位置,是通过辅助变量(指针),通过遍历来实现. 2.新的节点 next = temp.next. 3.将temp.next = 新的节点. package com ...
- JAVA单向/双向链表的实现
一.JAVA单向链表的操作(增加节点.查找节点.删除节点) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 ...
最新文章
- 搜索旋转排序数组—leetcode31
- 监督分类空白处也被分类了_监督学习(2)|本质是分类的“逻辑回归”
- 一个很有深度的C++内存问题---GDB调试(一)
- [html] 如何在页面引用外部的html页面?
- 即这样的WZSZF01代码是错误的
- led linux定时闪烁心跳,Linux驱动——LED闪烁
- STC51-C51基础知识
- 【kafka】The group member needs to have a valid member id before actually entering a consumer group
- Java中jdk安装与环境变量配置
- c#与mysql教程_C#连接MySQL操作详细教程
- python深度学习pdf_Python深度学习
- 聚类分析-K-means clustering 在生物信息学中的应用
- 哔哩哔哩助手V0.8.16.28
- 关于win8的各种版本的区别
- MPLS:多协议标签交换
- 线程 ManualResetEvent 类
- 数字孪生是什么?【深度解析】
- 移动端软件测试面试题及答案-2021年最新版
- linux stat函数讲解 -(转自秋水Leo)
- 【CTF特训营】 Reverse篇 2.Reverse分析
热门文章
- linux 加快系统时间,修改linux系统时间的方法
- python怎么一次输入两个数_python如何一次性输入多个数
- mysql安装和下载过程_mysql下载与安装过程
- 安装+wordpress+出现403+forbidden_Linux安装 Pure-ftpd
- python preference界面设置_Android设置界面5分钟搞定--Preferences的使用
- mysql 虚拟表 分页_MySql大表分页(附独门秘技)
- Java基础:红黑树概念
- jsp页面如何通过href跳转到另一个jsp
- Matlab使用for循环将多个行向量合成一个行向量或者一个多维矩阵
- 研究自动驾驶技术的算法需要哪些知识?