LeetCode 148. 排序链表

问题描述:

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

示例:

示例 1:

复制代码
输入:head = [4,2,1,3]
输出:[1,2,3,4]

示例 2:

复制代码
输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]

示例 3:

复制代码
输入:head = []
输出:[]

提示:

  • 链表中节点的数目在范围 [0, 5 * 104] 内
  • -105 <= Node.val <= 105

上代码,拿去即可运行:

java 复制代码
package onlyqi.daydayupgo06.test;

import java.util.Objects;

public class Solution {

    public static void main(String[] args) {
        // 2---1----3---5---4
        ListNode listNode4 = new ListNode(4);
        ListNode listNode5 = new ListNode(5, listNode4);
        ListNode listNode3 = new ListNode(3, listNode5);
        ListNode listNode1 = new ListNode(1, listNode3);
        ListNode listNode2 = new ListNode(2, listNode1);
//        while (listNode2 != null) {
//            System.out.print(listNode2.val+"   ");
//            listNode2 = listNode2.next;
//        }
        System.out.println("===========================================================");
        ListNode resultNode = sortList(listNode2);
        while (resultNode != null) {
            System.out.print(resultNode.val + "   ");
            resultNode = resultNode.next;
        }

    }

    public static ListNode sortList(ListNode head) {
        // 基础边界检查
        if (head == null || head.next == null) {
            return head;
        }
        ListNode resultNode = head;
        ListNode next = head.next;
        resultNode.next = null;

        while (!Objects.isNull(next)) {
            ListNode temp = next;
            next = next.next;

            if (temp.val < resultNode.val) {
                temp.next = resultNode;
                resultNode = temp;
            } else {
                ListNode curr = resultNode;
                while (curr.next != null && curr.next.val < temp.val) {
                    curr = curr.next;
                }
                temp.next = curr.next;
                curr.next = temp;
            }
        }
        return resultNode;
    }













//    public static ListNode sortList(ListNode head) {
//        // 基础边界检查
//        if (head == null || head.next == null) {
//            return head;
//        }
//        // resultNode 始终指向已排序部分的头节点
//        ListNode resultNode = head;
//        // next 指向待排序的下一个节点
//        ListNode next = head.next;
//        // 初始化:第一个节点已经算作排好序了,先断开它与后面的连接
//        resultNode.next = null;
//        while (next != null) {
//            // 1. 重要:提前保存下一个待排序节点,防止 temp.next 被修改后断链
//            ListNode temp = next;
//            next = next.next;
//            // 2. 情况一:temp 应该插入到排好序部分的【头部】(作为新的头)
//            if (temp.val <= resultNode.val) {
//                temp.next = resultNode;
//                resultNode = temp;
//            } else {
//                // 情况二:temp 应该插入到排好序部分的【中间或尾部】
//                ListNode current = resultNode;
//                // 寻找插入位置:找到第一个值大于 temp 的节点,或者到结尾
//                while (current.next != null && current.next.val < temp.val) {
//                    current = current.next;
//                }
//                // 将 temp 插入到 current 之后
//                temp.next = current.next;
//                current.next = temp;
//            }
//        }
//        return resultNode;
//    }


    public static class ListNode {
        int val;
        ListNode next;

        ListNode() {
        }

        ListNode(int val) {
            this.val = val;
        }

        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }


}

运行结果:

我要刷300道算法题,第147道 。 尽快刷到200,每天搞一道 。

相关推荐
Sirens.32 分钟前
Java并发锁详解:六类锁策略与 synchronized 底层原理
java·前端·算法
和裕1 小时前
全纸结构重型纸箱能否满足 1 吨以上设备出口熏蒸豁免要求?通关合规性全解析
大数据·运维·网络·人工智能·算法
tangguofeng1 小时前
不带头结点的链队操作集(不含InitFlag)(C语言版)
算法
苏打豆3 小时前
CRISP源码阅读——基于ROS2力矩反馈控制器与速度加速度零空间
c++·线性代数·算法·矩阵·机器人
蛋蛋的就会顺顺的3 小时前
hot100——矩阵
java·数据结构·算法·leetcode·力扣
老歌老听老掉牙3 小时前
麻花钻切屑形态演变的力学机制与临界条件分析
python·算法·钻头
zhangfeng11334 小时前
国产GPU/AI算力芯片现状(修订完整版 · 截至2026年9月
人工智能·算法·ai编程·npu
学代码的CJY4 小时前
从代码出发理解时间复杂度与空间复杂度
数据结构·算法
白帽攻防录5 小时前
SRC 挖洞:WSO2 JWT 算法混淆绕过深度复盘,CVE-2026-5430 不支持的算法怎么变成管理员
网络·算法·安全·网络安全·jwt
小O的算法实验室5 小时前
IEEE TEVC,基于精确与DQN群智能调度方法用于多目标异构USV
算法