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);


    }


}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CUDA内存模型

核函数性能并不只与线程束的执行有关。 CUDA内存模型概述 GPU和CPU内存模型的主要区别是&#xff0c;CUDA编程模型能将内存层次结构更好地呈现给用户&#xff0c;能让我们显示的控制它的行为。 对程序员来说&#xff0c;一般有两种类型的存储器&#xff1a; 可编程的&#x…

【docker 】 IDEA 安装 Docker 工具

打开File->Settings->Plugins 配置 Docker 的远程访问连接 Engine APIURL &#xff1a;tcp://192.168.0.1:2375 &#xff08;换成自己的docker开放端口&#xff09; 使用diea的docker插件 查看已有的镜像 创建一个容器 下面是最近更新的文章&#xff1a; 【docker 】 …

异地组网,让“远程运维”更简单

您是否在联网场景中有过这些需求&#xff1f; 摄像头需要联网统一监控、PLC需要联网告别本地升级、工控机需要联网告别本地配置、广告屏需要联网告别本地下载视频、远程打开终端设备WEB进行配置......这些问题有人新升级的“异地组网”功能统统可以解决&#xff01; 告别繁琐…

C++ 之CMake代码编译

1、编译过程 预处理-Pre-Processing //.i文件 # -E 选项指示编译器仅对输入文件进行预处理 g -E test.cpp -o test.i //.i文件 编译-Compiling // .s文件 # -S 编译选项告诉 g 在为 C 代码产生了汇编语言文件后停止编译 # g 产生的汇编语言文件的缺省扩展名是 .s g -S test…

LNMP部署及应用(Linux+Nginx+MySQL+PHP)

LNMP 我们为什么采用LNMP这种架构? 采用Linux、PHP、MySQL的优点我们不必多说。 Nginx是一个小巧而高效的Linux下的Web服务器软件&#xff0c;是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的&#xff0c;已经在一些俄罗斯的大型网站上运行多年&#xff0c;目…

QT程序通过GPIB-USB-HS转接线控制数字万用表

1、硬件准备 1.1、数字万用表 型号 &#xff1a;Agilent 34401A 前面图示&#xff1a; 后面图示&#xff1a;有GPIB接口 1.2、GPIB-USB-HS转接线 2、GPIB协议基础了解 2.1、引脚 8条数据线&#xff1a;DIO1 ~ DIO8 5条管理线&#xff1a;IFC、ATN、REN、EOI、SRQ 3条交握线…

冯喜运:5.2原油三连跌引发连锁反应,黄金市场拐点已至?

【黄金消息面分析】&#xff1a;4月ADP就业数据的强劲表现&#xff0c;为美联储的货币政策提供了新的挑战。在这一背景下&#xff0c;黄金市场的反应尤为值得关注。本文将深入探讨美国就业数据对美联储决策的影响&#xff0c;以及这些决策如何影响黄金市场的未来走向。通胀与就…

TouchGFX 总结

文章目录 使用中文字体多屏幕间交换数据UI to MCUMCU to UI API文档参考横竖屏切换 使用中文字体 添加一个textArea&#xff0c;默认的英文文本可见&#xff0c;输入中文字体后就看不见了&#xff0c;是因为这个默认的字体不支持中文&#xff0c;改一下字体就可以了&#xff1…

Java_从入门到JavaEE_08

一、Eclipse开发工具的介绍 Eclipse工具简绍 Eclipse 是著名的跨平台的自由集成开发环境&#xff08;IDE&#xff09;。最初主要用来 Java 语言开发&#xff0c;但是目前亦有人通过插件使其作为其他计算机语言比如 C 和 Python 的开发工具。 下载与安装 下载&#xff1a; Ecli…

现代神经网络总结(AlexNet VGG GoogleNet ResNet的区别与改进)

VGG NIN GoogleNet 1.VGG&#xff0c;NIN&#xff0c;GoogleNet的块结构图对比(注意:无AlexNet) 这些块带来的区别与细节 AlexNet未使用块,主要对各个层进行了解: 卷积:捕捉特征 relu:增强非线性 池化层:减少计算量 norm:规范数据分布 全连接层:分类VGG块的改善(对比AlexNe…

在UI界面中播放视频_unity基础开发教程

在UI界面中播放视频_unity基础开发教程 前言操作步骤结语 前言 之前我写过一篇在场景中播放视频的文章&#xff0c;但是在开发中有时候也会在UI的界面中播放视频&#xff0c;这期我们做一下在UI的界面中播放视频。 操作步骤 首先在场景中创建一个Raw Image&#xff0c;UI->…

java-spring-mvc(服务端接收客户端传参)

目录 &#x1f3af; 服务端接收参数 ✨HttpServletRequest接收 ✨ 声明参数接收 ✨声明pojo类来接收 &#x1f52a;小试牛刀 &#x1f3af; 服务端接收参数 ✨HttpServletRequest接收 HttpServletRequest是Java Servlet规范中定义的一个接口&#xff0c;它提供了与HTTP请求…

【webrtc】RemoteAudioSource的创建线程

m98 代码&#xff1a;I:\webrtc m98_yjf\src\pc\rtp_transmission_manager.cc RtpTransmissionManager::CreateReceiver 在信令线程创建receiver receiver 是&#xff1a; rtc::scoped_refptr<RtpReceiverProxyWithInternal<RtpReceiverInternal>>receiver;其实际…

Advanced RAG 05:探讨基于文本内在语义信息的数据分块方法

编者按&#xff1a;在 RAG (Retrieval Augmented Generation) 系统中&#xff0c;将文本数据高效地划分成相对独立且富有语义信息的数据块&#xff08;chunks&#xff09;是一项较为关键的任务。基于规则的传统数据分块方法存在一些问题&#xff0c;因此探讨基于文本内在语义信…

NASA数据集——VIIRS每日 L3深蓝气溶胶网格产品(AERDB_D3_VIIRS_SNPP),以 1 x 1 度

VIIRS/SNPP Deep Blue Level 3 monthly aerosol data, 1 degree x1 degree grid 简介 美国国家航空航天局&#xff08;NASA&#xff09;的可见红外成像辐射计套件&#xff08;VIIRS&#xff09;标准三级&#xff08;L3&#xff09;每月深蓝气溶胶产品来自苏米国家极轨伙伴关系…

PHP定时任务框架taskPHP3.0学习记录7宝塔面板手动可以执行自动无法执行问题排查及解决方案(sh脚本、删除超过特定天数的日志文件、kill -9)

PHP定时任务框架taskPHP3.0学习记录 PHP定时任务框架taskPHP3.0学习记录1&#xff08;TaskPHP、执行任务类的实操代码实例&#xff09;PHP定时任务框架taskPHP3.0学习记录2&#xff08;环境要求、配置Redis、crontab执行时间语法、命令操作以及Screen全屏窗口管理器&#xff0…

AWS最近宣布Amazon Q现已全面上市

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Gateway结合Nacos使用!!!

一、本地结合使用 1. 引入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> 2. bootstarp.yml配置文件 如果Nacos中配置使用yaml格式&…

Ubuntu上的screenfetch

2024年4月28日&#xff0c;周日下午 这些文本是由一个叫做 “screenfetch” 的命令生成的&#xff0c;它会显示一些系统和用户信息&#xff0c;包括操作系统、内核版本、系统运行时间、安装的软件包数量、使用的Shell、分辨率、桌面环境、窗口管理器、主题、图标主题、字体、CP…

Linux(ubuntu)—— 用户管理user 用户组group

一、用户 1.1、查看所有用户 cat /etc/passwd 1.2、新增用户 useradd 命令&#xff0c;我这里用的是2.4的命令。 然后&#xff0c;需要设置密码 passwd student 只有root用户才能用passwd命令设置其他用户的密码&#xff0c;普通用户只能够设置自己的密码 二、组 2.1查看…