zoukankan      html  css  js  c++  java
  • leetcode Sort List 对链表进行排序

    描述:

    Sort a linked list in O(n log n) time using constant space complexity.

    在O(n*log(n))的时间复杂度,常数级空间复杂度内对一个链表进行排序
    采用归并排序,用快慢指针将链表分成两部分,最后合并两个链表.

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* sortList(ListNode* head) {
            if(!head || !head->next) return head;
            ListNode * p = head;
            ListNode * q = head->next;
            //二分
            while(q && q->next){
                p = p->next;
                q = q->next->next;
            }
            ListNode * right = sortList(p->next);    //对后半段递归排序
            p->next = NULL; //把前后两段分开
            ListNode * left = sortList(head);
            //合并前后两段,实际上是用这里的判断大小来排序
            return merge(left, right);
        }
    
        // 合并函数
        ListNode *merge(ListNode *l, ListNode *r){
            ListNode res(0);
            ListNode * p = &res;
            //按增序合并l和r
            while(l && r){
                if(l->val < r->val){
                    p->next = l;
                    l = l->next;
                }else{
                    p->next = r;
                    r = r->next;
                }
                p = p->next;
            }
            if(l) p->next = l;
            if(r) p->next = r;
            return res.next;
        }
    };
    
    转载请保留原文链接及作者
    本文标题:
    文章作者: LepeCoder
    发布时间:
    原始链接:
  • 相关阅读:
    0.1+0.2!==0.3
    标准盒模型IE盒模型
    Vue自定义组件通过v-model通信
    vue-cli3.0 使用 postcss-pxtorem px转rem
    render函数、createElement函数
    mixins(混入)
    vue.extend与vue.component
    js事件系列
    vue脚手架项目结构
    python模块和包
  • 原文地址:https://www.cnblogs.com/lepeCoder/p/leetcode-SortList.html
Copyright © 2011-2022 走看看