思路1初始化一个新的头节点reverseHead,然后遍历旧链表,利用头插法向reverseHead进行插入

思路2:
1.反转相当于数据的更换(1和n,2和n-1,3和n-2)n为链表的长度
2.通过遍历进行数据的更换,n/2为循环退出的条件

  1. package com.company;
  2. import java.util.Stack;
  3. /**
  4. * @author:抱着鱼睡觉的喵喵
  5. * @date:2021/2/4
  6. * @description:
  7. */
  8. public class LinkedListDemo {
  9. public static void main(String[] args) {
  10. Node node1 = new Node(1, 96, "Ronin");
  11. Node node2 = new Node(2, 100, "lisi");
  12. Node node3 = new Node(3, 99, "张三");
  13. Node node4 = new Node(4, 63, "zsh");
  14. Node node5 = new Node(5, 65, "zms");
  15. SingleLinkedList singleLinkedList = new SingleLinkedList();
  16. singleLinkedList.add(node1);
  17. singleLinkedList.add(node2);
  18. singleLinkedList.add(node2);
  19. singleLinkedList.add(node4);
  20. singleLinkedList.add(node5);
  21. System.out.println("链表反转后的数据如下:");
  22. getReverse2(singleLinkedList.getNode());
  23. singleLinkedList.list();
  24. }
  25. /**
  26. * 链表的反转 方法1
  27. * 思路:1.反转相当于数据的更换(1和n,2和n-1,3和n-2)n为链表的长度
  28. * 2.通过遍历进行数据的更换,n/2为循环退出的条件
  29. *
  30. * @param head
  31. * @return
  32. */
  33. public static void getReverse(Node head) {
  34. if (head.next == null) {
  35. System.out.println("LinkedList is empty!");
  36. return;
  37. }
  38. int length = getLength(head);
  39. int num1 = 0;
  40. int num2 = 0;
  41. Node mid = new Node();
  42. for (int i = 1, j = length; i <= length / 2; i++, j--) {
  43. Node temp = head;
  44. Node cur = head;
  45. while (true) {
  46. temp = temp.next;
  47. num1++;
  48. if (num1 == i) {
  49. num1 = 0;
  50. break;
  51. }
  52. }
  53. while (true) {
  54. cur = cur.next;
  55. num2++;
  56. if (j == num2) {
  57. num2 = 0;
  58. break;
  59. }
  60. }
  61. mid.sno = temp.sno;
  62. mid.score = temp.score;
  63. mid.data = temp.data;
  64. temp.sno = cur.sno;
  65. temp.score = cur.score;
  66. temp.data = cur.data;
  67. cur.sno = mid.sno;
  68. cur.score = mid.score;
  69. cur.data = mid.data;
  70. }
  71. Node temp2 = head.next;
  72. while (temp2 != null) {
  73. System.out.println(temp2);
  74. temp2 = temp2.next;
  75. }
  76. }
  77. /**
  78. * 链表的反转2
  79. * 思路:
  80. * 初始化一个新的头节点reverseHead,然后遍历链表head,利用头插法向reverseHead进行插入
  81. *
  82. * @param head
  83. */
  84. public static void getReverse2(Node head) {
  85. if (head.next == null) {
  86. System.out.println("LinkedList is empty!");
  87. return;
  88. }
  89. Node reverseHead = new Node(0, 0, "");
  90. Node cur = null;
  91. Node temp = head.next;
  92. while (temp != null) {
  93. cur = temp.next;
  94. temp.next = reverseHead.next;
  95. reverseHead.next = temp;
  96. temp = cur;
  97. }
  98. head.next = reverseHead.next;
  99. }
  100. //节点类
  101. class Node {
  102. public Node next;
  103. public int sno;
  104. public int score;
  105. public String data;
  106. public Node() {
  107. }
  108. public Node(int Sno, int NScore, String Data) {
  109. this.sno = Sno;
  110. this.score = NScore;
  111. this.data = Data;
  112. }
  113. @Override
  114. public String toString() {
  115. return "Node{" +
  116. "sno=" + sno +
  117. ", score=" + score +
  118. ", data='" + data + '\'' +
  119. '}';
  120. }
  121. }
  122. //链表操作类
  123. class SingleLinkedList {
  124. private Node head = new Node(0, 0, ""); //初始化头节点
  125. public Node getNode() {
  126. return head;
  127. }
  128. // add student data
  129. public void add(Node node) { //数据添加
  130. Node temp = head;
  131. while (temp.next != null) {
  132. temp = temp.next;
  133. }
  134. temp.next = node;
  135. }
  136. //output
  137. public void list() { //遍历数据进行打印
  138. Node temp = head.next;
  139. if (temp == null) {
  140. System.out.println("LinkedList is empty!");
  141. } else {
  142. while (temp != null) {
  143. System.out.println(temp);
  144. System.out.println();
  145. temp = temp.next;
  146. }
  147. }
  148. }
  149. }

Java实现单链表的反转的更多相关文章

  1. 理解单链表的反转(java实现)

    要求很简单,输入一个链表,反转链表后,输出新链表的表头.   反转链表是有2种方法(递归法,遍历法)实现的,面试官最爱考察的算法无非是斐波那契数列和单链表反转,递归方法实现链表反转比较优雅,但是对于不 ...

  2. Java实现单链表反转操作

    单链表是一种常见的数据结构,由一个个节点通过指针方式连接而成,每个节点由两部分组成:一是数据域,用于存储节点数据.二是指针域,用于存储下一个节点的地址.在Java中定义如下: public class ...

  3. Java实现单链表的各种操作

    Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素   4.实现链表的反转   5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...

  4. java实现单链表的增删功能

    JAVA 实现单链表的增删功能 package linked; class LinkedTable{ } public class LinkedTableTest { public static vo ...

  5. 秒懂单链表及其反转(reverse)

    什么是链表,这种数据结构是由一组Node组成的,这群Node一起表示了一个序列.链表是最普通,最简单的数据结构(物理地址不连续),它是实现其他数据结构如stack, queue等的基础. 链表比起数组 ...

  6. JAVA数据结构——单链表

    链表:一. 顺序存储结构虽然是一种很有用的存储结构,但是他有如下几点局限性:1. 因为创造线性表的时候已经固定了空间,所以当需要扩充空间时,就需要重新创建一个地址连续的更大的存储空间.并把原有的数据元 ...

  7. 使用java实现单链表(转载自:https://www.cnblogs.com/zhongyimeng/p/9945332.html)

    使用java实现单链表----(java中的引用就是指针)转载自:https://www.cnblogs.com/zhongyimeng/p/9945332.html ? 1 2 3 4 5 6 7 ...

  8. java实现单链表反转(倒置)

    据说单链表反转问题面试中经常问,而链表这个东西相对于数组的确稍微难想象,因此今天纪录一下单链表反转的代码. 1,先定义一个节点类. 1 public class Node { 2 int index; ...

  9. java实现单链表常见操作

    一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...

随机推荐

  1. CF1228E题解

    设 \(f_{i,j}\) 为恰好 \(i\) 行 \(j\) 列不满足条件的矩阵个数, \(g_{i,j}\) 为钦定 \(i\) 行 \(j\) 列不满足条件的矩阵个数. 容易得到: \[g_{x ...

  2. Redis 大 key 问题总结

    多大的 key 算大? 阿里云Redis 最佳实践中提到 合理的 Key 中 Value 的字节大小,推荐小于10 KB.过大的 Value 会引发数据倾斜.热点Key.实例流量或 CPU 性能被占满 ...

  3. 使用Docker 部署MongoDB

    使用 Docker 部署 MongoDB 查看官网安装教程后感觉直接使用包管理器安装mongo比较复杂,本文主要介绍使用docker安装部署mongo的方法,并对基本配置项进行自定义.保姆式全程指导. ...

  4. 在西电使用校内Linux 开源软件镜像

    西电开源社区(linux.xidian.edu.cn)为全校师生提供开源镜像服务,由于其使用校内服务器,因此产生的流量不会计入校园网 打开镜像列表:https://linux.xidian.edu.c ...

  5. Play商店显示需要进行身份认证。您需要登录自己的Google帐户

    前段时间把一加6系统从H2OS换到OxygenOS,Play商店死活不能登录,网络配置等问题已经排除,重装Google全家桶也没有解决问题,最后找到原因. 解决办法:在应用列表中找到Google Pl ...

  6. mysqkl修改存放位置 列的数据

    1.表一旦创建后,列的数据是否可以修改?如果可以说明语法 update 表名称 set 列名='新内容' where 列名=某值  橙色代表条件列 2.修改存放数据的文件夹 先关闭mysql  把da ...

  7. SQL语句优化、mysql不走索引的原因、数据库索引的设计原则

    SQL语句优化 1 企业SQL优化思路 1.把一个大的不使用索引的SQL语句按照功能进行拆分 2.长的SQL语句无法使用索引,能不能变成2条短的SQL语句让它分别使用上索引. 3.对SQL语句功能的拆 ...

  8. 74CMS 3.0任意文件写入漏洞

    一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.因为74CMS3.0源代码编辑使用GBK编 ...

  9. MySQL—索引(Index)

    前言: 关于MySql索引数据结构和实现原理的讲解值得阅读一下: 实现原理:https://www.cnblogs.com/songwenjie/p/9415016.htm 索引数据结构:https: ...

  10. EMQX_AUTH_USERNAME 使用

    emqx_auth_username 它通过比对每个终端的接入的 username 和 password 与 EMQ X 中存储的是否一致来实现终端接入的控制.其功能逻辑如下: emqx_auth_u ...