链表翻转的思路有很多,再此做个记录。
思路一:最简单的思路就是先遍历链表,逐一将链表里的节点放入到栈里面;然后在遍历栈,将栈里的元素在逐一出栈形成新的链表。主要是利用了栈的后进先出的特点。

 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 单向链表翻转相关推荐

  1. JAVA单向链表实现

    JAVA单向链表实现 单向链表 链表和数组一样是一种最常用的线性数据结构,两者各有优缺点.数组我们知道是在内存上的一块连续的空间构成,所以其元素访问可以通过下标进行,随机访问速度很快,但数组也有其缺点 ...

  2. java 单向链表 双向链表_java 单向链表与双向链表的实现

    链表 单向链表 单向链表概念 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 这是一种物理结构,不是树那样的逻辑结构.链表和顺序表两种物理结构, ...

  3. java单向链表详解

    1.概述 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始:链表是使用指针进行构造的列表:又称为结点列表,因为链表是由一个个结点组装起来的:其中每个 ...

  4. Java 单向链表和单向循环链表的代码实现

    这个链表,以前上学的时候,学c语言,还是数据结构的时候,学过.也许也实现过吧.下面我就简单记录下这个链表的实现. 单向链表跟单向循环链表的差别就是:单向链表是有结束位的,指向null的时候,就到结尾了 ...

  5. Java 单向链表模拟

    链表是有序的列表 链表是以节点的方式来存储的,各个节点不一定是连续存储的 分为带头节点的链表和没有头节点的链表 头节点不存放具体数据 单向链表: 其中每一个节点包含一个存储数据的data,一个指向下一 ...

  6. Java单向链表反转

    要求 给出单链表的头节点 head ,要求反转链表,并返回反转后的链表. 实现原理 单向链表反转就是将链表的指针方向改变.由于单链表没有指向前一个结点的指针,所以,我们定义一个指向前一个节点的指针pr ...

  7. java单向链表中的头插法与尾插法

    单链表属于数据结构中的一种基本结构,是一种线性结构,在此使用Java对其中的头插法以及尾插法进行解释.数据结构 首先定义好链表中的节点类: 其中,data表明节点所存放的数据,next表明指向下一节点 ...

  8. Java单向链表操作详解

    /* 先定义一个Node类用来存储节点的值域和指针域 * 即当前节点中的值和后面节点的方法 * 在C中就是相当与定义一个结构体类型一个数据域和指针域的方法 */ class LNode{//这个写法已 ...

  9. java单向链表按顺序插入节点

    实现步骤: 1.首先找到新添加的节点的位置,是通过辅助变量(指针),通过遍历来实现. 2.新的节点 next = temp.next. 3.将temp.next = 新的节点. package com ...

  10. 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 ...

最新文章

  1. 搜索旋转排序数组—leetcode31
  2. 监督分类空白处也被分类了_监督学习(2)|本质是分类的“逻辑回归”
  3. 一个很有深度的C++内存问题---GDB调试(一)
  4. [html] 如何在页面引用外部的html页面?
  5. 即这样的WZSZF01代码是错误的
  6. led linux定时闪烁心跳,Linux驱动——LED闪烁
  7. STC51-C51基础知识
  8. 【kafka】The group member needs to have a valid member id before actually entering a consumer group
  9. Java中jdk安装与环境变量配置
  10. c#与mysql教程_C#连接MySQL操作详细教程
  11. python深度学习pdf_Python深度学习
  12. 聚类分析-K-means clustering 在生物信息学中的应用
  13. 哔哩哔哩助手V0.8.16.28
  14. 关于win8的各种版本的区别
  15. MPLS:多协议标签交换
  16. 线程 ManualResetEvent 类
  17. 数字孪生是什么?【深度解析】
  18. 移动端软件测试面试题及答案-2021年最新版
  19. linux stat函数讲解 -(转自秋水Leo)
  20. 【CTF特训营】 Reverse篇 2.Reverse分析

热门文章

  1. linux 加快系统时间,修改linux系统时间的方法
  2. python怎么一次输入两个数_python如何一次性输入多个数
  3. mysql安装和下载过程_mysql下载与安装过程
  4. 安装+wordpress+出现403+forbidden_Linux安装 Pure-ftpd
  5. python preference界面设置_Android设置界面5分钟搞定--Preferences的使用
  6. mysql 虚拟表 分页_MySql大表分页(附独门秘技)
  7. Java基础:红黑树概念
  8. jsp页面如何通过href跳转到另一个jsp
  9. Matlab使用for循环将多个行向量合成一个行向量或者一个多维矩阵
  10. 研究自动驾驶技术的算法需要哪些知识?