Java实现单链表的反转
思路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实现单链表的反转相关推荐
- java 链表反转_LeetCode206 实现单链表的反转
LeetCode206 实现单链表的反转 LeetCode 码,码不停题 1.题目介绍 Reverse a singly linked list. Example: Input:1->2-> ...
- Java实现单链表反转操作
单链表是一种常见的数据结构,由一个个节点通过指针方式连接而成,每个节点由两部分组成:一是数据域,用于存储节点数据.二是指针域,用于存储下一个节点的地址.在Java中定义如下: public class ...
- java数据结构 - 单链表(腾讯面试题实现单链表反转)
直接上实现代码 //单链表的反转public static void reverseList(HeroNode head){//如果当前链表为空,或只有一个节点,无需反转if (head.next = ...
- java实现单链表常见操作,java面试题,java初级笔试题
写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 一. ...
- Java实现单链表的逆转置
单链表逆转置的递归与非递归方式 package link.reverse; // 定义一个单链表 class Node { //变量 private int record; //指向下一个对象 pri ...
- 程序员面试系列——单链表的反转
单向链表的反转(或者叫逆置)是经常被问到的考题.建议考前临阵磨枪,强背一波. 代码说明: void reverse_list(node_t *head) 此函数实现带头结点(也叫表头.哑结点)的单链表 ...
- 链表之单链表的反转总结
单链表的反转是常见的面试题目.本文总结了2种方法. 1 定义 单链表node的数据结构定义如下: class ListNode {int val;ListNode next;ListNode(int ...
- java单链表通讯录_[Java教程]用java实现单链表(菜鸟出征)
[Java教程]用java实现单链表(菜鸟出征) 0 2016-03-24 14:00:06 package code;class Node{ Node next; int data; public ...
- Java实现单链表、栈、队列三种数据结构
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:远航 cnblogs.com/yang-guang- ...
最新文章
- Android Studio创建项目
- cacti 添加redis监控(远程服务器)
- 牛客题霸 NC23 划分链表
- 类似TH养车的电商系统设计思路
- UVa 11481 (计数) Arrange the Numbers
- linux(Centos7)安装elasticsearch6.2.2
- SVG SMIL animation动画详解
- python修改txt里面的内容_python修改txt部分内容,并保存。
- 路飞学城-Python爬虫集训-第二章
- GRE阅读高频机经原文及题目之能源消费(逻辑)
- 网络编程:Socket编程从IPv4转向IPv6支持
- dB 和 dbm 对照表
- 深度学习蓄势待发,即将“爆破”欧拉方程
- matlab中clc、clear、close命令以及函数文件
- c语言 eval,分享:自己写的eval函数
- hadoop环境新手安装教程
- 如何在 Matplotlib 中绘制垂直线
- ZYNQ 7000 AMP模式双裸核运行 双方共享内存交互
- js遍历localStorage的键值对
- 题解 P3588 [POI2015]PUS
热门文章
- 一步一步写算法(之寻找丢失的数)
- Web.config中连接字符串的加密和解密[转载]
- bbs mysql_简单BBS程序(需MySQL支持)
- python单例模式数据库连接池_Python实现单例模式的四种方式
- 里面如何配置库_【专享】SolidWorks管道库国标模型下载SolidWorks Routing管道设计学习必备...
- java跳过_java跳过https证书直接请求工具类
- 与计算机硬件相关领域,计算机硬件相关专业论文范文.doc
- 家用电脑虚拟机做服务器_家用电脑能当服务器吗
- postman关闭ssl验证_【第5期】springboot:苹果内购服务端验证
- php二叉树广度插入数据,php-如何在不使用广度优先遍历的情况下找到二叉树级别k的节点数?...