zoukankan      html  css  js  c++  java
  • leetcode

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

    思路:采用归并排序或者快速排序

    #include <iostream>
    using namespace std;
    
    struct ListNode {
        int val;
        ListNode *next;
        ListNode(int x): val(x), next(NULL) {}
    };
    
    class Solution {
    public:
        ListNode *sortList(ListNode *head) {
            if (!head || head->next == NULL) return head;
    
            ListNode *PA = head, *PB = head;        
            while (PA && PB && PB->next && PB->next->next) {
                PA = PA->next;            
                PB = PB->next->next;
            }
            PB = PA->next;
            PA->next = NULL;
            PA = head;
    
            PA = sortList(PA);    
            PB = sortList(PB);
            return mergeList(PA, PB);
        }
    
        ListNode *mergeList(ListNode *PA, ListNode *PB) {
            if (!PB) return PA;
            if (!PA) return PB;
    
            ListNode *merge, *head;
            if (PA->val < PB->val) {
                head = PA;
                PA = PA->next;
            }
            else {
                head = PB;
                PB = PB->next;
            }
    
            merge = head;
            while (PA && PB) {
                if (PA->val < PB->val) {
                    merge->next = PA;
                    PA = PA->next;
                }
                else {
                    merge->next = PB;
                    PB = PB->next;
                }
                merge = merge->next;
            }
    
            if (PA) merge->next = PA;
            if (PB) merge->next = PB;
    
            return head;
        }
    };
    
    int main(int argc ,char *argv[])
    {
        ListNode *p, *q; 
        p = new ListNode(3);
        p->next = new ListNode(2);
        p->next->next = new ListNode(4);
    
        Solution *solution = new Solution();
    
        p = solution->sortList(p);
        while(p) {
            cout << p->val << endl;
            p = p->next;
        }
        return 0;
    }
  • 相关阅读:
    spin lock自旋锁 双链表操作(多线程安全)(Ring0)
    Interlocked单向链式栈
    自旋锁(Spin Lock)
    可等待定时器(获取系统时间)
    APC注入(Ring3)
    IOCP IO完成端口
    异步设备IO OVERLAPPED结构(设备内核对象 事件内核对象 可提醒IO)
    读写锁 SRWLOCK
    shell查看进程
    linux dmesg命令
  • 原文地址:https://www.cnblogs.com/zhuangzebo/p/3983594.html
Copyright © 2011-2022 走看看