148. 排序链表 --力扣 --JAVA

简介: 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。

 题目

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表

解题思路

    1. 先将链表各节点之间的联系断开然后再进行排序;
    2. 通过List存放节点,对List按照节点的值进行排序;
    3. 遍历List重新建立联系。

    代码展示

    class Solution {
        public ListNode sortList(ListNode head) {
            if(head == null){
                return null;
            }
            List<ListNode> list = new ArrayList<>();
            while (head != null){
                //创建临时节点存放下一个节点
                ListNode node = head.next;
                //将当前节点与下一个节点断开连接,再存放到List中,避免产生循环
                head.next = null;
                list.add(head);
                head = node;
            }
            //对list进行升序排序
            list.sort(new Comparator<ListNode>() {
                @Override
                public int compare(ListNode o1, ListNode o2) {
                    return o1.val - o2.val;
                }
            });
            for (int i = 1; i < list.size(); i++){
                list.get(i - 1).next = list.get(i);
            }
            return list.get(0);
        }
    }

    image.gif


    目录
    相关文章
    |
    3天前
    |
    存储 Java
    Java中ArrayList 元素的排序
    本文提供了Java中根据`ArrayList`元素的某个属性进行排序的示例代码,包括实现`Comparable`接口和重载`compareTo`方法,然后使用`Collections.sort`方法进行排序。
    |
    8天前
    |
    存储 Java API
    【Java高手必备】揭秘!如何优雅地对List进行排序?掌握这几种技巧,让你的代码瞬间高大上!
    【8月更文挑战第23天】本文深入探讨了Java中对List集合进行排序的各种方法,包括使用Collections.sort()、自定义Comparator以及Java 8的Stream API。通过示例代码展示了不同情况下如何选择合适的方法:从简单的整数排序到自定义类对象的排序,再到利用Comparator指定特殊排序规则,最后介绍了Stream API在排序操作中的简洁应用。理解这些技术的区别与应用场景有助于提高编程效率。
    15 4
    |
    8天前
    |
    存储 Java
    |
    9天前
    |
    搜索推荐 算法 Java
    堆排序实战:轻松实现高效排序,附详细Java代码
    嗨,大家好!我是小米,一名热爱技术分享的程序员。今天要带大家了解堆排序——一种基于二叉堆的数据结构,具有O(n log n)时间复杂度的选择排序算法。堆排序分为构建大顶堆和排序两个阶段:先建堆使根节点为最大值,再通过交换根节点与末尾节点并调整堆来逐步排序。它稳定高效,空间复杂度仅O(1),适合对稳定性要求高的场合。虽然不如快速排序快,但在避免递归和节省空间方面有优势。一起动手实现吧!如果有任何疑问,欢迎留言交流!
    27 2
    |
    9天前
    |
    存储 Java
    |
    8天前
    |
    存储 Java
    |
    8天前
    |
    存储 搜索推荐 Java
    |
    2天前
    |
    Java 开发者 C++
    Java多线程同步大揭秘:synchronized与Lock的终极对决!
    Java多线程同步大揭秘:synchronized与Lock的终极对决!
    28 5
    |
    4天前
    |
    监控 Java 测试技术
    Java并发编程最佳实践:设计高性能的多线程系统
    Java并发编程最佳实践:设计高性能的多线程系统
    18 1
    |
    2天前
    |
    安全 Java 开发者
    Java多线程同步:synchronized与Lock的“爱恨情仇”!
    Java多线程同步:synchronized与Lock的“爱恨情仇”!
    34 5
    下一篇
    云函数