算法笔记:力扣148. 排序链表

news2024/12/27 1:06:43

思路:

将链表中的节点一一取出放到list集合中,然后通过Comparator实现排序,对排序好的list节点一一取出,组成排序好的新链表。

关键思路:

Comparator实现对ListNode的排序;

💡注意:

在很多的链表类题目中,都会涉及到先遍历链表,然后再构建新链表的场景,而其中的一些细节有所不同,而且需要特别注意,否则会导致一些空指针异常出现。

遍历链表:

//首先创建一个指针节点 使其指向头结点
ListNode current=head;
//然后循环获取
while(current!=null){
    add(current);
    //遍历后 移动current 使其指向当前节点的下一个节点
    current=current.next;
}

创建新链表:

创建新链表与遍历不同的是,如果我们是像遍历的方式指向当前的节点的话,那么只相当于移动了节点指针,而没有改变节点的指向顺序。所以需要在上一个节点.next指向当前节点。

//虚拟节点 没有意义 相当于链表的带空头节点
ListNode dummy=new ListNode(0);
//节点指针,指向当前空头节点
ListNode current=dummy;

for(ListNode node:list){
    //使得空头结点指向真正的头结点
    current.next=node;
    //然后移动一位到当前节点
    current=current.next;
    //这一步是为了防止出现环 也就是链表尾部如果原节点有next指向 需要使其为null 否则会出现环
    current=null;
}
//只需要返回空节点的.next即可
return dummy.next;

image.png

image.png



代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode sortList(ListNode head) {
            //思路 将链表遍历 然后存放到集合 然后调用排序api 
        ListNode dummy=head;
        
        ListNode current=dummy;

        List<ListNode> list=new ArrayList<>();

        while(current!=null){
            list.add(current);
            current=current.next;
        }//将所有节点放入到一个list集合中
        //然后排序 由于不能修改源码 即只能使用Comparetor排序
        //通过匿名内部类
        Comparator<ListNode> compare=new Comparator<ListNode>(){
            public int compare(ListNode node1,ListNode node2){
                return Integer.compare(node1.val,node2.val);

            }
        };
        //使用比较器进行排序
        Collections.sort(list,compare);
        ListNode d=new ListNode(0);
        current=d;
        for(ListNode node:list){
            current.next=node;
            current=current.next;
            current.next=null;
        }
     //   head=dummy;
        return d.next;
        

    }
}

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

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

相关文章

Kafka知识体系

一、认识Kafka 1. kafka适用场景 消息系统&#xff1a;kafka不仅具备传统的系统解耦、流量削峰、缓冲、异步通信、可扩展性、可恢复性等功能&#xff0c;还有其他消息系统难以实现的消息顺序消费及消息回溯功能。 存储系统&#xff1a;kafka把消息持久化到磁盘上&#xff0c…

MacOS安装MySQL数据库和Java环境以及Navicat

安装MySQL 去官网下载&#xff1a;MySQL 下载好后安装&#xff0c;在设置里往下滑&#xff0c;出现了这样&#xff0c;就代表安装成功了 接下来配置环境&#xff1a; 首先在我们的设备上找到终端并打开,输入 vim ~/.bash_profile(注意vim后面的空格)&#xff0c;输入完成后点击…

Css、less和Sass(SCSS)的区别详解

文章目录 Css、less和Sass&#xff08;SCSS&#xff09;的区别详解一、引言二、CSS 简介1.1、CSS 示例 三、Less 简介2.1、Less 特性2.2、Less 示例 四、Sass&#xff08;SCSS&#xff09;简介3.1、Sass 特性3.2、SCSS 示例 五、总结 Css、less和Sass&#xff08;SCSS&#xff…

misc-好久不见17

wireshark_secret Ctrlshirtv 8、热心助人的小明同学 使用工具volatility查看镜像的信息 volatility_2.6_win64_standalone -f image.raw imageinfo 列出所有用户和密码&#xff1a; volatility_2.6_win64_standalone -f image.raw --profileWin7SP1x86_23418 hashdump Xi…

利用PyTorch Profiler实现大模型的性能分析和故障排查

本文介绍PyTorch Profiler结合TensorBoard分析模型性能&#xff0c;分别从数据加载、数据传输、GPU计算、模型编译等优化思路去提升模型训练的性能。最后总结了一些会导致CPU和GPU同步的常见的PyTorch API&#xff0c;在使用这些API时需要考虑是否会带来性能影响。 PyTorch Pr…

关于IDE的相关知识之三【插件安装、配置及推荐的意义】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于ide插件安装、配置及推荐意义的相关内容…

ECharts柱状图-交错正负轴标签,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个柱状图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供…

预处理详解(完结篇)

⽬录 一. 什么是预处理 c 1 预定义符号 2. #define定义常量 3 . #define定义宏 4. 带有副作⽤的宏参数 5. 宏替换的规则 6 宏函数的对⽐ 三 #和## 四 命名约定 五. #undef 一 什么是预处理 有许多文件中都内容我们是看不懂的&#xff0c;那怎么才能令…

【k8s】监控metrics-server

metrics-server介绍 Metrics Server是一个集群范围的资源使用情况的数据聚合器。作为一个应用部署在集群中。Metric server从每个节点上KubeletAPI收集指标&#xff0c;通过Kubernetes聚合器注册在Master APIServer中。为集群提供Node、Pods资源利用率指标。 就像Linux 系统一样…

ERP 入库生产第一个版本完成

剩下的逻辑都是基于入库表达操作,资源划分,在销售,出库 windows 下直接部署 mysql 数据库,更轻量一些

ESP32-S3模组上跑通ES8388(12)

接前一篇文章&#xff1a;ESP32-S3模组上跑通ES8388&#xff08;11&#xff09; 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析了es8388_init函数中的第5段代码&#xff0c;本回继续往下解析。为了便于理解和回顾&#xff0c;再次贴出es8388_init函数源码&#xff0c;在…

对于相对速度的重新理解 - 15

换一个视角看待能量可能一切都更为清晰&#xff0c;从&#xff0c; 可以意识到&#xff0c;最终质量 指的是 的数量。这个数量就是 我们可以去除电性振动和磁性振动的影响&#xff0c;把这两种振动的影响归结在 里面&#xff0c;这就像是&#xff0c;有一百万个某种物体&#x…

记一次腾讯云海外服务器http能正常访问https访问拒绝问题处理过程

最近双十一, 购了一台腾讯云的海外服务器&#xff0c; 开通后就是一堆的服务器软件安装数据上传和配置&#xff0c;没想到&#xff0c;等待配置完成后才发现https无法正常访问&#xff0c;于是开启了自查。 1. 检查nginx软件的ssl配置 nginx http https配置参考 server {l…

Java 单元测试模拟框架-Mockito 的介绍

Mockito 是什么 Mockito 是一个用于单元测试的模拟框架&#xff0c;基于它可以使用简洁易用的API编写出色的测试。 Mockito 允许开发人员创建和管理模拟对象&#xff08;mock objects&#xff09;&#xff0c;以便在测试过程中替换那些不容易构造或获取的对象。 Mockito的基本…

分享一款 Vue 图片编辑插件 (推荐)

&#x1f4a5;本篇文章给大家分享一款强大到没朋友的Vue图片编辑插件&#xff0c;可以对图片进行旋转、缩放、裁剪、涂鸦、标注、添加文本等&#xff0c;快来试试并收藏吧&#xff01;&#x1f495; 这是一款对图片进行旋转、缩放、裁剪、涂鸦、标注、添加文本在线处理的图片处…

在基于控制器的 API 和最小 API 之间进行选择

文章目录 ASP.NET Core 支持两种创建 API 的方法&#xff1a;基于控制器的方法和最小 API。 API 项目中的控制器是派生自 ControllerBase 的类。 最小 API 在 Lambda 或方法中使用逻辑处理程序定义终结点。 本文解释了这两种方法之间的差异。 最小 API 的设计默认隐藏了主机类…

【UVM】phase机制

Phase的种类 funcion phase 不消耗仿真时间 八种&#xff08;图中白色背景&#xff09; task phase 消耗仿真时间 一种&#xff08;图中灰色背景&#xff09;&#xff0c;run_phase又可以细分为十二种 Phase的功能 bulid_phase&#xff1a;uvm_component类的实例化&…

《装甲车内气体检测“神器”:上海松柏 K-5S 电化学传感器模组详解》

《装甲车内气体检测“神器”:上海松柏 K-5S 电化学传感器模组详解》 一、引言二、K-5S 电化学传感器模组概述&#xff08;一&#xff09;产品简介&#xff08;二&#xff09;产品特点&#xff08;三&#xff09;产品适用场景 三、电化学传感器原理及优点&#xff08;一&#xf…

【Linux课程学习】:文件第二弹---理解一切皆文件,缓存区

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 Linux学习笔记&#xff1a; https://blog.csdn.net/d…

汽车控制软件下载移动管家手机控车一键启动app

移动管家手机控制汽车系统是一款实现车辆远程智能控制的应用程序‌。通过下载并安装特定的APP&#xff0c;用户可以轻松实现以下功能&#xff1a;‌远程启动与熄火‌&#xff1a;无论身处何地&#xff0c;只要有网络&#xff0c;即可远程启动或熄火车辆&#xff0c;提前预冷或预…