【力扣hot100题】(032)排序链表

挺难的,主要是对排序算法不熟悉。

看了答案,归并排序真的是一个很好的解法。

大致思路是递归,将链表不断拆分为小块,每块进行排序后合并新块。

这种排序对链表来说真的是个很不错的选择,因为链表二分可以用快慢指针,合并之前做过,很好做。

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* dg(ListNode* head,ListNode* tail){
        if(head==nullptr) return head;
        if(head->next==tail){
            head->next=nullptr;
            return head;
        }
        ListNode* slow=head;
        ListNode* fast=head;
        while(fast!=tail){
            slow=slow->next;
            fast=fast->next;
            if(fast!=tail) fast=fast->next;
        }
        ListNode* h=dg(head,slow);
        ListNode* t=dg(slow,tail);
        ListNode* pre=new ListNode(0);
        ListNode* result=pre;
        while(h||t){
            if(t==nullptr||h&&h->val<t->val){
                pre->next=h;
                h=h->next;
            }
            else if(h==nullptr||h->val>=t->val){
                pre->next=t;
                t=t->next;
            }
            pre=pre->next;
        }
        return result->next;
    }
    ListNode* sortList(ListNode* head) {
        return dg(head,nullptr);
    }
};
相关推荐
啥都想学点的研究生10 分钟前
一篇文章讲清楚:逻辑回归
算法·机器学习·逻辑回归
货拉拉技术1 小时前
Agent 场景下 Token 成本优化的实战技巧
算法
hahaha60161 小时前
HLS高层次综合设计技巧--循环merge和循环split
人工智能·算法·计算机视觉
JAI科研1 小时前
Deepseek Agent Harness教程(七) | Deepseek Harness不是一个内核加一堆插件
开发语言·人工智能·深度学习·算法·自然语言处理·transformer·vllm
集思广益的灰太狼2 小时前
变频器启动致PLC数据异常?西门子G120配合滤波器EMC抑制方案
人工智能·算法·工控·emc·电磁兼容·变频器·西门子
方方洛2 小时前
vllm教程-03-架构设计
算法·架构
玄昌盛不会编程2 小时前
LeetCode——2091. 从数组中移除最大值和最小值
java·算法·leetcode
如何取名2 小时前
结合实际业务进行LRU淘汰算法优化设计(数据库开发日志)
数据库·算法
aichitang20242 小时前
快乐泛函每一天:希尔伯特空间中的最佳逼近与正交投影定理
人工智能·考研·算法·ai·面试·泛函分析
淬炼之火2 小时前
笔记:Visually-Guided Policy Optimization for Multimodal Reasoning
人工智能·笔记·算法·机器学习·语言模型·自然语言处理