• LeetCode:Sort List


    Problem:


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


    解题思路:


        首先,时间复杂度能达到O(nlgn)的排序算法,常见的有3种:堆排序、归并排序和高速排序,


    而对于链表,用堆排序显然不太可能,所以,我们可用归并或者是快排.因为合并两个链表,仅仅用


    改动对应的指针,所以其能做到空间复杂度O(1).以下是利用归并排序思想实现的链表排序.


    解题思路:

    class Solution {
    public:
        ListNode *sortList(ListNode *p) 
        {
            if (p == NULL || p->next == NULL)
                return p;
            //增加一个头节点,避免合并时讨论rear为空的情况.
            ListNode *head = new ListNode(-1), *q = head;
            head->next = p;
            int cnt = 0;
            while (p)
            {
                ++cnt;
                p = p->next;
                if (cnt % 2 == 0)
                    q = q->next;
            }
            p = q->next, q->next = NULL;
            //递归进行左右两支排序
            head->next = q = sortList(head->next);
            p = sortList(p);
            //合并
            q = Merge(head, p);
            free(head);
            return q;        
        }
        ListNode* Merge(ListNode *head, ListNode *r)
        {
            ListNode *l = head->next, *rear = head;
            while (l && r)
            {
                if (l->val < r->val)
                {
                    rear->next = l;
                    l = l->next, rear = rear->next;
                }
                else
                {
                    rear->next = r;
                    r = r->next, rear = rear->next;
                }
            }
            while (l)
            {
                rear->next = l;
                l = l->next, rear = rear->next;
            }
            while (r)
            {
                rear->next = r;
                r = r->next, rear = rear->next;
            }
            return head->next;
        }
    };
    


  • 相关阅读:
    JavaScript数字精度丢失问题总结
    前端开发调试线上代码的两款工具
    微信公众账号开发入门
    Chrome/Firefox 中头toFixed方法四舍五入兼容性问题
    GIT/node使用
    addEventListener 的另类写法
    JavaScript 动态插入 CSS
    JavaScript判断各浏览器CSS前缀的两种方式
    流程办理操作说明
    流程设计器(2)
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4213212.html
Copyright © 2020-2023  润新知