java-链表排序

需求

在这里插入图片描述

思路

  • 排序:讲所有的值都取出来,存储到ArrayList中,然后排序,将排序之后的元素依次使用add方法添加到自定义链表
  • 合并排序:先合并,然后调用刚才写的排序算法
  • 合并:将表一的头结点作为新链表的头结点,表一的尾节点指向表二的头结点

代码

自定义链表

// 自定义一个链表
public class MyLinkedList<E> {Node<E> head = null;public Node<Integer> merge(Node<Integer> head1, Node<Integer> head2) {if (head1 == null ) {return head2;}if (head2 == null) {return head1;}// 直接将表一的头结点作为新链表的头结点,表一的尾节点指向表二的头结点Node<Integer> tmp = head1;while (tmp.next != null) {tmp = tmp.next;}tmp.next = head2;// 对新链表进行排序MyLinkedList<Integer> myLinkedList = new MyLinkedList<>();myLinkedList.head = head1;return myLinkedList.sorted();}//定义一个内部类public static class Node<E> {E data;Node<E> next;public Node(E data, Node<E> next) {this.data = data;this.next = next;}}// 添加一个元素public void add(E e) {Node<E> newNode = new Node<>(e, null);if (head == null) {head = newNode;return;}Node<E> temp = head;// 尾插法while (temp.next != null) {temp = temp.next;}temp.next = newNode;}public Node<E> sorted() {// 如果链表为空或者只有一个元素,直接返回if (head == null || head.next == null) {return head;}//定义一个新的list 存放数据List<E> list = new ArrayList<>();while (head != null) {list.add(head.data);head = head.next;}//对list进行排序list.sort((o1, o2) -> {if (o1 instanceof Integer) {return (Integer) o1 - (Integer) o2;}return 0;});//将排序后的数据重新放入链表MyLinkedList<E> myLinkedList = new MyLinkedList<>();for (E e : list) {myLinkedList.add(e);}return myLinkedList.head;}public static void forEachPrint(MyLinkedList.Node<Integer> sorted1) {while (sorted1 != null) {System.out.print(sorted1.data+" ");sorted1 = sorted1.next;}}
}

使用

public class Test {public static void main(String[] args) {// 第一个链表MyLinkedList myLinkedList1 = new MyLinkedList();myLinkedList1.add(2);myLinkedList1.add(4);myLinkedList1.add(1);// 获取头结点MyLinkedList.Node<Integer> head1 = myLinkedList1.head;// 第二个链表MyLinkedList myLinkedList2 = new MyLinkedList();myLinkedList2.add(9);myLinkedList2.add(1);myLinkedList2.add(3);// 获取头结点MyLinkedList.Node<Integer> head2 = myLinkedList2.head;//功能1:对两个链表排序,并且分别遍历输出MyLinkedList.Node<Integer> sorted1 = myLinkedList1.sorted();MyLinkedList.Node<Integer> sorted2 = myLinkedList2.sorted();System.out.println("排序后的链表1:");MyLinkedList.forEachPrint(sorted1);System.out.println();System.out.println("排序后的链表2:");MyLinkedList.forEachPrint(sorted2);//功能2:合并两个有序链表,合并后的链表依然有序,并且遍历输出MyLinkedList.Node<Integer> merge = myLinkedList1.merge(head1, head2);// 遍历输出System.out.println();System.out.println("合并后的链表:");MyLinkedList.forEachPrint(merge);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/317723.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity ParticleSystem 入门

概述 在项目的制作过程成&#xff0c;一定少不了粒子系统的使用吧&#xff0c;如果你想在项目粒子效果&#xff0c;那这部分的内容一定不要错过喔&#xff01;我添加了理解和注释更好理解一点&#xff01; 这次的内容比较多&#xff0c;右侧有目录&#xff0c;可以帮助快速导…

一文理解前端如何调用后端(java)方法

阅读完文章大约需要3~5分钟 文章目录 一、什么是后端方法路径&#xff1f;二、ajax、axios调用后端方法总结 一、什么是后端方法路径&#xff1f; 这里针对的是 java 后端项目中在 controller 文件夹中的类文件&#xff0c;这类文件的后缀一般都会带有 controller&#xff0c…

【webrtc】MessageHandler 9: 基于线程的消息处理:执行Port销毁自己

Port::Port 构造的时候,就触发了一个异步操作,但是这个操作是要在 thread 里执行的,因此要通过post 消息 MSG_DESTROY_IF_DEAD 到thread跑:port的创建并米有要求在thread中 但是port的析构却在thread里 这是为啥呢?

Jenkins邮件发送失败问题解决

如下提示为 Extended E-mail Notification开启Debug模式下显示的错误信息&#xff0c; (Debug模式设置方法&#xff1a;Dashboard-> manage Jenkins->configure System)DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2 DEB…

LabVIEW高效目标跟踪系统

LabVIEW高效目标跟踪系统 随着机器视觉技术的飞速发展&#xff0c;设计和实现高效的目标跟踪系统成为了众多领域关注的焦点。基于LabVIEW平台&#xff0c;结合NI Vision机器视觉库&#xff0c;开发了一种既高效又灵活的目标跟踪系统。通过面向对象编程方法和队列消息处理器程序…

图像置乱加密-Arnold加密算法

置乱加密是另一种较常用的加密方法&#xff0c;现也被许多文献选用&#xff0c;置乱加密可以是以像素为单位进行全局置乱&#xff0c;该方式打乱了图像像素值的位置&#xff0c;使其图像内容失去相关性&#xff0c;达到保护的目的。也可以是以块为单位进行置乱&#xff0c;该方…

[数据结构]———交换排序

目录 1.交换排序 第一个定义了一个名为Swap的函数 第二个三数取中 2.冒泡排序 代码解析 冒泡排序的特性总结&#xff1a; 3.快速排序 1. hoare版本 2. 挖坑法 代码解析 3. 前后指针版本 代码解析 1.交换排序 基本思想&#xff1a;所谓交换&#xff0c;就是根据序列中两…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.4--汇编LED驱动程序

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

【PPT设计】颜色对比、渐变填充、简化框线、放大镜效果、渐变形状配图、线条的使用

目录 图表颜色对比、渐变填充、简化框线放大镜效果渐变形状配图 线条的使用区分标题与说明信息区分标题与正文,区分不同含义的内容**聚焦****引导****注解****装饰** 图表 颜色对比、渐变填充、简化框线 小米汽车正式亮相&#xff01;你们都在讨论价格&#xff0c;我全程只关…

[1673]jsp在线考试管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 在线考试管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

Linux 进程间通信之匿名管道

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux知识分享⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d; 目录 前言 一. 进程间通信介绍 1.进程间通…

如何解决pycharm创建项目报错 Error occurred when installing package ‘requests‘. Details.

&#x1f42f; 如何解决PyCharm创建项目时的包安装错误&#xff1a;‘requests’ &#x1f6e0;️ 文章目录 &#x1f42f; 如何解决PyCharm创建项目时的包安装错误&#xff1a;requests &#x1f6e0;️摘要引言正文&#x1f4d8; **问题分析**&#x1f680; **更换Python版本…

利用STM32实现语音识别功能

引言 随着物联网和智能设备的普及&#xff0c;语音识别技术正逐渐成为用户交互的主流方式之一。 STM32微控制器具备处理高效率语音识别算法的能力&#xff0c;使其成为实现低成本、低功耗语音交互系统的理想选择。 本教程将介绍如何在STM32平台上开发和部署一个基础的语音识…

详解SDRAM基本原理以及FPGA实现读写控制

文章目录 一、SDRAM简介二、SDRAM存取结构以及原理2.1 BANK以及存储单元结构2.2 功能框图2.3 SDRAM速度等级以及容量计算 三、SDRAM操作命令3.1 禁止命令&#xff1a; 4b1xxx3.2 空操作命令&#xff1a;4b01113.3 激活命令&#xff1a;4b00113.4 读命令&#xff1a;4b01013.5 写…

---文件操作---

#include<iostream> using namespace std; #include<fstream>void test01() {//1.包含头文件//2.创建流对象ofstream ofs;//3.指定打开方式ofs.open("test.txt", ios::out);//写文件//4.写内容ofs << "张三" << endl;ofs <<…

使用 Flask 和 WTForms 构建一个用户注册表单

在这篇技术博客中&#xff0c;我们将使用 Flask 和 WTForms 库来构建一个用户注册表单。我们将创建一个简单的 Flask 应用&#xff0c;并使用 WTForms 定义一个注册表单&#xff0c;包括用户名、密码、确认密码、邮箱、性别、城市和爱好等字段。我们还将为表单添加验证规则&…

罗宾斯《管理学》第15版笔记/课后习题/考研真题答案

第Ⅰ篇 管理导论 第1章 工作场所中的管理者和你 1.1 知识结构导图 1.2 考点难点归纳 1.3 课后习题详解 1.4 考研真题详解 附加模块一 管理史 知识结构导图 考点难点归纳 课后习题详解 考研真题详解 第2章 决 策 2.1 知识结构导图 2.2 考点难点归纳 2.3 课后习题详解…

git 第一次安装设置用户名密码

git config --global user.name ljq git config --global user.email 15137659164qq.com创建公钥命令 输入后一直回车 ssh-keygen -t rsa下面这样代表成功 这里是公钥的 信息输入gitee 中 输入下面命令看是否和本机绑定成功 ssh -T gitgitee.com如何是这样&#xff0c;恭喜…

类和对象中的默认成员函数(构造,拷贝构造,析构......)深入了解类和对象

文章目录 类的6个默认成员函数构造函数总结构造函数 析构函数总结析构函数 拷贝构造函数总结拷贝构造函数 赋值运算符重载取地址重载和const取地址重载 类的6个默认成员函数 一个什么都不写的类我们称之为“空类” class Test {}我们什么都没写&#xff0c;这里看着空空的&am…

对2023年图灵奖揭晓看法

2023年图灵奖揭晓&#xff0c;你怎么看&#xff1f; 2023年图灵奖&#xff0c;最近刚刚颁给普林斯顿数学教授 Avi Wigderson&#xff01;作为理论计算机科学领域的领军人物&#xff0c;他对于理解计算中的随机性和伪随机性的作用&#xff0c;作出了开创性贡献。这些贡献不仅推…