Java实现实现单链表反转及求中间结点

2023-12-28 16:58

本文主要是介绍Java实现实现单链表反转及求中间结点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

package task1;/*** 功能:实现单链表反转* Created by liumao 2019/8/5**/
public class ReverseLinkedList {static class Node{private int data;private Node next;public Node(int data, Node next) {this.data = data;this.next = next;}public int getData() {return data;}// 生成一个新的结点public static Node createNode(int value) {return new Node(value,null);}/*** 功能:单链表反转  1234   4321* 若存在没有遍历完的结点,头指针就向后移动,继续遍历* @param  list 反转链表*/public static Node reverse(Node list) {//定义头结点Node headNode = null;//定义尾指针Node preNode = null;//指向list链表Node currentNode = list;//如果指针指向的链表不为空while (currentNode != null) {//先将指针指向的结点中存储的下一个结点地址存储到nextNode中Node nextNode = currentNode.next;//判断指针指向该结点是否有结点,若null,则指针处于链表的最后一位,该结点的最后一位结点为null,即没有结点if (nextNode == null) {//如果是最后一个结点,则把它作为反转链表的头结点headNode = currentNode;}//将反转后的链表地址存储到在单链表拆解下来的结点地址域中currentNode.next = preNode;//尾结点向前移动一个结点preNode = currentNode;//头指针向后移动currentNode = nextNode;}return headNode;}/*** 功能:单链表的合并* @param node1:链表 node1* @param node2:链表 node2* @return*/public static Node mergeSortedLists(Node node1, Node node2) {//判断两个单链表是否为nullif (node1 == null) return node2;if (node2 == null) return node1;//分别将两个链表赋值给 p、qNode p = node1;Node q = node2;//定义一个头结点Node head;//比较两个结点数据域中元素的大小if (p.data < q.data) {//如果  p 数据小于 q 数据,将 p 结点赋值给headhead = p;//数据小的那条链表的指针向后移动一位p = p.next;} else {//否则,移动另一个指针head = q;q = q.next;}//将 head 结点赋值给 rNode r = head;//判断两个链表指针指到最后一个结点,要想跳出循环,肯定p、q其中有一个先遍历完while (p != null && q != null) {//如果没有指到最后的结点,继续进行比较大小if (p.data < q.data) {//r 继承着 head 继续向下添加结点r.next = p;p = p.next;} else {r.next = q;q = q.next;}//r 指针向下移动,指向新添加的结点r = r.next;}//判断 p、q 两个链表哪一个先遍历完,最后将剩余的链表拼接合成到链表的最后if (p != null) {r.next = p;} else {r.next = q;}//返回头结点return head;}}/*** 功能:求中间结点* 思路:定义一个指针 fast 用来移动做逻辑判断* @param list:传入要求中间结点的链表* @return*/public static Node findMiddleNode(Node list) {//如果单链表为 null,就返回 nullif (list == null) return null;//slow 指向的就是 fast.next 与 fast.next.next 中间的那个结点Node fast = list;Node slow = list;//循环遍历满足fast指针条件单链表while (fast.next != null && fast.next.next != null) {fast = fast.next.next;slow = slow.next;}//返回的slow就是中间结点return slow;}//输入链表的所有值public static void printAll(Node list) {Node p = list;while (p != null) {System.out.print(p.data + " ");p = p.next;}System.out.println();}
}

这篇关于Java实现实现单链表反转及求中间结点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/546621

相关文章

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函