zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    


  • 相关阅读:
    POJ4046 Sightseeing
    SGU 298. King Berl VI
    POJ1741 Tree
    POJ1639 Picnic Planning
    POJ1635 Subway tree systems
    [JSOI2008]最小生成树计数
    ftrace使用简介(三)
    make: *** 没有规则可以创建目标"menuconfig". 停止
    编译linux内核(ftrace)
    vim 缩进配置
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4213212.html
Copyright © 2011-2022 走看看