思路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;
} @Override
public 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 data
public void add(Node node) { //数据添加
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = node;
} //output
public 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实现)

    要求很简单,输入一个链表,反转链表后,输出新链表的表头.   反转链表是有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. LGP5664题解

    厉害. 对于每一列选的数最多占一半,我们得设计一个三维 DP.然而状态刚好够,但是转移明显炸了(而且似乎还需要多项式?) 考虑正难则反,DP 不合法的方案数.总方案数很好算. 发现不合法的方案数只有某 ...

  2. python链接mqtt订阅与发布

    什么是mqtt: MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的"轻量级"消息协议.该协议构 ...

  3. Wireshark DTN解析器拒绝服务漏洞

    受影响系统:Wireshark Wireshark 2.2.0 - 2.2.1Wireshark Wireshark 2.0.0 - 2.0.7描述:CVE(CAN) ID: CVE-2016-937 ...

  4. Mybatis使用注解开发(未完)

    使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心 注解在接口实现 @Select("SELECT * FROM user") Lis ...

  5. Centos7 使用Docker安装rocket.chat聊天工具

    镜像下载.域名解析.时间同步请点击阿里云开源镜像站 下载安装 Rocket.Chat 目前最新的版本为 4.0.1,可以通过手动或者容器的方式安装.这里我推荐使用容器,部署过程会方便不少. 如果要用容 ...

  6. windows服务器怎么将证书添加到受信任证书颁发机构

    1.键盘输入win+r 快键键,出现运行,输入mmc. 2.打开控制台根节点,点击上方导航栏的文件-->添加删除管理单元.如下图. 3.在可用的管理单元中选择"证书",计算机 ...

  7. idea创建web项目以及配置Tomcat

    废话不多说,直接上干活: 1.在project中现创建好module,也就是java web项目 2.把路径名写清楚就行了 3.创建在WEB-INF上右击创建classes和lib以存储class编译 ...

  8. SpringBoot---Eclipse编辑yml文件不能自动提示的问题(Eclipse安装插件STS)

    在学习了几天SpringBoot之后,刚开始跟着别人的博客使用的是IDEA,后来跟着视频学,讲师用的eclipse,便跟着用了,但是发现在编辑yml配置文件的时候,没有自动提示的功能,百度之后发现是没 ...

  9. Postman请求报错:Error:getaddrinfo ENOENT 50.88.88.88

    一.问题来源 今天发布一个新开发的项目到通州现场,内容是开放几个接口给第三方调用,需要现场部署的同事使用postman调用测试一下,现场同事使用postman调用后反馈有如下错误: 二.解决方法 发现 ...

  10. Shiro Session放到Redis中常遇到的问题

    Shiro会话管理:https://shiro.apache.org/session-management.html#SessionManagement-CustomSessionIDs Redis主 ...