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.mzph.cn/news/831044.shtml

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

相关文章

使用 Docker-Compose 部署 Kafka

使用 Docker-Compose 部署 Kafka 1. Kafka 镜像选择2. 版本选择3. 无密码部署4. 命令行操作 Kafak 生产消息、消费消息1. Kafka 镜像选择 这里使用的是 Docker Hub 上使用最多的镜像:bitnami/kafka,为什么使用这个镜像,看下官方的介绍: Bitnami closely tracks upstream …

开发日志:Kylin麒麟操作系统部署ASP.NET CORE

需求场景&#xff1a; 我需要部署的项目是在Windows上开发的&#xff0c;目标框架为.net core 6.0 因此我们需要先在kylin上部署项目运行所需要的环境。 借助百度词条&#xff0c;先看看Kylin是什么&#xff1a; 服务器资源&#xff1a; 查看系统版本 cat /etc/kylin-releas…

MyBatis 核心配置讲解(下)

大家好&#xff0c;我是王有志&#xff0c;一个分享硬核 Java 技术的互金摸鱼侠。 我们书接上回&#xff0c;继续聊 MyBatis 的核心配置&#xff0c;我们今天分享剩下的 5 项核心配置。 不过正式开始前&#xff0c;我会先纠正上一篇文章 MyBatis 核心配置讲解&#xff08;上&…

React 第十二章 UmiJs

Umi.js 介绍 Umi 是由蚂蚁集团推出的可扩展的企业级前端应用框架。Umi 以路由为基础&#xff0c;同时支持配置式路由和约定式路由&#xff0c;保证路由的功能完备&#xff0c;并以此进行功能扩展。然后配以生命周期完善的插件体系&#xff0c;覆盖从源码到构建产物的每个生命周…

OpenGL 入门(一)—— OpenGL 基础

1、OpenGL 基础知识 1.1 OpenGL 简介 OpenGL&#xff08;Open Graphics Library&#xff09;是图形领域的工业标准&#xff0c;是一套跨编程语言、跨平台、专业的图形编程&#xff08;软件&#xff09;接口。它用于二维、三维图像&#xff0c;是一个功能强大&#xff0c;调用…

PySpark学习---销售情况数据统计分析案例

需求分析&#xff1a; 某公司是做零售相关业务&#xff0c;旗下出品各类收银机. 目前公司的收银机已经在全国铺开,在各个省份均有店铺使用.机器是联网的,每一次使用都会将售卖商品数据上传到公司后台.老板现在想对省份维度的销售情况进行统计分析 逻辑需求&#xff1a; 1.各省销…

数据结构与算法实验题五道 A一元多项式的求导 B还原二叉树 C 六度空间 D 基于词频的文件相似度 E 模拟excel排序

A (1) 输入格式说明&#xff1a; 以指数递降方式输入多项式非零项系数和指数&#xff08;绝对值均为不超过1000的整数&#xff09;。数字间以空格分隔。 (2) 输出格式说明&#xff1a; 以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔&#xff0c;但…

第八篇:隔离即力量:Python虚拟环境的终极指南

隔离即力量&#xff1a;Python虚拟环境的终极指南 1 引言 在编程的多元宇宙中&#xff0c;Python语言犹如一颗闪耀的星辰&#xff0c;其魅力不仅仅在于简洁的语法&#xff0c;更在于其庞大而繁荣的生态系统。然而&#xff0c;随着应用的增长和复杂性的提升&#xff0c;开发者们…

Python数据分析系列(五):python数据结构 — Pandas中的Series使用

文章目录 前言一、Series创建与属性二、Series的索引三、Series的基本运算四、Series的数据对齐五、Series操作1、判断是否是唯一值2、判断值3、值计数4、缺失值处理1、滤除缺失数据2、填充缺失数据5、日期时间列中提取月份和年份前言 Pandas 是基于 NumPy 的一种工具,该工具…

ChatGPT 记忆功能上线 能记住你和GPT互动的所有内容

你和ChatGPT的互动从今天开始变得更加智能&#xff01;ChatGPT现在可以记住你的偏好和对话细节&#xff0c;为你提供更加相关的回应。和它聊天&#xff0c;你可以教它记住新的东西&#xff0c;例如&#xff1a;“记住我是素食主义者&#xff0c;当你推荐食谱时。”想了解ChatGP…

【15】Head First Java 学习笔记

HeadFirst Java 本人有C语言基础&#xff0c;通过阅读Java廖雪峰网站&#xff0c;简单速成了java&#xff0c;但对其中一些入门概念有所疏漏&#xff0c;阅读本书以弥补。 第一章 Java入门 第二章 面向对象 第三章 变量 第四章 方法操作实例变量 第五章 程序实战 第六章 Java…

Java基于微信小程序+uniapp的校园失物招领小程序(V3.0)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

微软如何打造数字零售力航母系列科普06 - 如何使用微软的Copilot人工智能

如何使用微软的Copilot人工智能&#xff1f; Copilot和ChatGPT有很多相似之处&#xff0c;但微软的聊天机器人本身就有一定的优势。以下是如何对其进行旋转&#xff0c;并查看其最引人注目的功能。 ​​​​​​​ &#xff08;资料来源&#xff1a;Lance Whitney/微软&…

NLP 笔记:TF-IDF

TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff0c;词频-逆文档频率&#xff09;是一种用于信息检索和文本挖掘的统计方法&#xff0c;用来评估一个词在一组文档中的重要性。TF-IDF的基本思想是&#xff0c;如果某个词在一篇文档中出现频率高&#xff0…

使用c++类模板和迭代器进行List模拟实现

List 一、创建节点结构二、创建迭代器类1、类的结构2、一系列的运算符重载 三、创建list1、细节把握2、迭代器函数3、构造函数和析构函数4、增删查改的成员函数 一、创建节点结构 template <class T>//节点结构 struct ListNode {ListNode<T>* _next;ListNode<…

HTML_CSS学习:CSS的编写位置

一、位置_行内样式 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>位置_行内样式</title> </head> <body> <!-- 行内样式&#xff1a;写在标签Style…

Springboot+vue+小程序+基于微信小程序的在线学习平台

一、项目介绍    基于Spring BootVue小程序的在线学习平台从实际情况出发&#xff0c;结合当前年轻人的学习环境喜好来开发。基于Spring BootVue小程序的在线学习平台在语言上使用Java语言进行开发&#xff0c;在数据库存储方面使用的MySQL数据库&#xff0c;开发工具是IDEA。…

APScheduler定时器使用:django中使用apscheduler,使用mysql做存储后端

一、基本环境 python版本&#xff1a;3.8.5 APScheduler3.10.4 Django3.2.7 djangorestframework3.15.1 SQLAlchemy2.0.29 PyMySQL1.1.0二、django基本设置 2.1、新增一个app 该app用来写apscheduler相关的代码 python manage.py startapp gs_scheduler 2.2、修改配置文件s…

关于NPM的Registry(npm源)

查看当前npm源&#xff1a; npm config get registry 官方源和淘宝源&#xff1a; ①官方源&#xff1a; npm config set registryhttp://registry.npmjs.org ②淘宝源&#xff1a; npm config set registryhttps://registry.npmmirror.com 据了解&#xff1a; 淘宝以前的源…

Ollamallama

Olllama 直接下载ollama程序&#xff0c;安装后可在cmd里直接运行大模型&#xff1b; llama 3 meta 开源的最新llama大模型&#xff1b; 下载运行 1 ollama ollama run llama3 2 github 下载仓库&#xff0c;需要linux环境&#xff0c;windows可使用wsl&#xff1b; 接…