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,每天搞一道 。

相关推荐
xiaoxue..7 小时前
合并两个升序链表 与 合并k个升序链表
java·javascript·数据结构·链表·面试
啊森要自信7 小时前
CANN ops-cv:AI 硬件端视觉算法推理训练的算子性能调优与实战应用详解
人工智能·算法·cann
仟濹7 小时前
算法打卡day2 (2026-02-07 周五) | 算法: DFS | 3_卡码网99_计数孤岛_DFS
算法·深度优先
驭渊的小故事7 小时前
简单模板笔记
数据结构·笔记·算法
YuTaoShao8 小时前
【LeetCode 每日一题】1653. 使字符串平衡的最少删除次数——(解法一)前后缀分解
算法·leetcode·职场和发展
VT.馒头8 小时前
【力扣】2727. 判断对象是否为空
javascript·数据结构·算法·leetcode·职场和发展
goodluckyaa8 小时前
LCR 006. 两数之和 II - 输入有序数组
算法
孤狼warrior8 小时前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
Σίσυφος19008 小时前
PCL法向量估计 之 RANSAC 平面估计法向量
算法·机器学习·平面
xhbaitxl8 小时前
算法学习day39-动态规划
学习·算法·动态规划