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

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

package com.company;import java.util.Stack;/*** @author:抱着鱼睡觉的喵喵* @date:2021/2/4* @description:*/
public class LinkedListDemo {public static void main(String[] args) {Node node1 = new Node(1, 96, "Ronin");Node node2 = new Node(2, 100, "lisi");Node node3 = new Node(3, 99, "张三");Node node4 = new Node(4, 63, "zsh");Node node5 = new Node(5, 65, "zms");SingleLinkedList singleLinkedList = new SingleLinkedList();singleLinkedList.add(node1);singleLinkedList.add(node2);singleLinkedList.add(node2);singleLinkedList.add(node4);singleLinkedList.add(node5);System.out.println("链表反转后的数据如下:");getReverse2(singleLinkedList.getNode());singleLinkedList.list();}/*** 链表的反转 方法1* 思路:1.反转相当于数据的更换(1和n,2和n-1,3和n-2)n为链表的长度* 2.通过遍历进行数据的更换,n/2为循环退出的条件** @param head* @return*/public static void getReverse(Node head) {if (head.next == null) {System.out.println("LinkedList is empty!");return;}int length = getLength(head);int num1 = 0;int num2 = 0;Node mid = new Node();for (int i = 1, j = length; i <= length / 2; i++, j--) {Node temp = head;Node cur = head;while (true) {temp = temp.next;num1++;if (num1 == i) {num1 = 0;break;}}while (true) {cur = cur.next;num2++;if (j == num2) {num2 = 0;break;}}mid.sno = temp.sno;mid.score = temp.score;mid.data = temp.data;temp.sno = cur.sno;temp.score = cur.score;temp.data = cur.data;cur.sno = mid.sno;cur.score = mid.score;cur.data = mid.data;}Node temp2 = head.next;while (temp2 != null) {System.out.println(temp2);temp2 = temp2.next;}}/*** 链表的反转2* 思路:* 初始化一个新的头节点reverseHead,然后遍历链表head,利用头插法向reverseHead进行插入** @param head*/public static void getReverse2(Node head) {if (head.next == null) {System.out.println("LinkedList is empty!");return;}Node reverseHead = new Node(0, 0, "");Node cur = null;Node temp = head.next;while (temp != null) {cur = temp.next;temp.next = reverseHead.next;reverseHead.next = temp;temp = cur;}head.next = reverseHead.next;}//节点类
class Node {public Node next;public int sno;public int score;public String data;public Node() {}public Node(int Sno, int NScore, String Data) {this.sno = Sno;this.score = NScore;this.data = Data;}@Overridepublic String toString() {return "Node{" +"sno=" + sno +", score=" + score +", data='" + data + '\'' +'}';}
}//链表操作类
class SingleLinkedList {private Node head = new Node(0, 0, ""); //初始化头节点public Node getNode() {return head;}// add student datapublic void add(Node node) {        //数据添加Node temp = head;while (temp.next != null) {temp = temp.next;}temp.next = node;}//outputpublic void list() {            //遍历数据进行打印Node temp = head.next;if (temp == null) {System.out.println("LinkedList is empty!");} else {while (temp != null) {System.out.println(temp);System.out.println();temp = temp.next;}}}
}

Java实现单链表的反转相关推荐

  1. java 链表反转_LeetCode206 实现单链表的反转

    LeetCode206 实现单链表的反转 LeetCode 码,码不停题 1.题目介绍 Reverse a singly linked list. Example: Input:1->2-> ...

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

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

  3. java数据结构 - 单链表(腾讯面试题实现单链表反转)

    直接上实现代码 //单链表的反转public static void reverseList(HeroNode head){//如果当前链表为空,或只有一个节点,无需反转if (head.next = ...

  4. java实现单链表常见操作,java面试题,java初级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 一. ...

  5. Java实现单链表的逆转置

    单链表逆转置的递归与非递归方式 package link.reverse; // 定义一个单链表 class Node { //变量 private int record; //指向下一个对象 pri ...

  6. 程序员面试系列——单链表的反转

    单向链表的反转(或者叫逆置)是经常被问到的考题.建议考前临阵磨枪,强背一波. 代码说明: void reverse_list(node_t *head) 此函数实现带头结点(也叫表头.哑结点)的单链表 ...

  7. 链表之单链表的反转总结

    单链表的反转是常见的面试题目.本文总结了2种方法. 1 定义 单链表node的数据结构定义如下: class ListNode {int val;ListNode next;ListNode(int ...

  8. java单链表通讯录_[Java教程]用java实现单链表(菜鸟出征)

    [Java教程]用java实现单链表(菜鸟出征) 0 2016-03-24 14:00:06 package code;class Node{ Node next; int data; public ...

  9. Java实现单链表、栈、队列三种数据结构

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:远航 cnblogs.com/yang-guang- ...

最新文章

  1. Android Studio创建项目
  2. cacti 添加redis监控(远程服务器)
  3. 牛客题霸 NC23 划分链表
  4. 类似TH养车的电商系统设计思路
  5. UVa 11481 (计数) Arrange the Numbers
  6. linux(Centos7)安装elasticsearch6.2.2
  7. SVG SMIL animation动画详解
  8. python修改txt里面的内容_python修改txt部分内容,并保存。
  9. 路飞学城-Python爬虫集训-第二章
  10. GRE阅读高频机经原文及题目之能源消费(逻辑)
  11. 网络编程:Socket编程从IPv4转向IPv6支持
  12. dB 和 dbm 对照表
  13. 深度学习蓄势待发,即将“爆破”欧拉方程
  14. matlab中clc、clear、close命令以及函数文件
  15. c语言 eval,分享:自己写的eval函数
  16. hadoop环境新手安装教程
  17. 如何在 Matplotlib 中绘制垂直线
  18. ZYNQ 7000 AMP模式双裸核运行 双方共享内存交互
  19. js遍历localStorage的键值对
  20. 题解 P3588 [POI2015]PUS

热门文章

  1. 一步一步写算法(之寻找丢失的数)
  2. Web.config中连接字符串的加密和解密[转载]
  3. bbs mysql_简单BBS程序(需MySQL支持)
  4. python单例模式数据库连接池_Python实现单例模式的四种方式
  5. 里面如何配置库_【专享】SolidWorks管道库国标模型下载SolidWorks Routing管道设计学习必备...
  6. java跳过_java跳过https证书直接请求工具类
  7. 与计算机硬件相关领域,计算机硬件相关专业论文范文.doc
  8. 家用电脑虚拟机做服务器_家用电脑能当服务器吗
  9. postman关闭ssl验证_【第5期】springboot:苹果内购服务端验证
  10. php二叉树广度插入数据,php-如何在不使用广度优先遍历的情况下找到二叉树级别k的节点数?...