zoukankan      html  css  js  c++  java
  • leetcode 148. Sort List

    https://leetcode.com/problems/sort-list/discuss/46714/Java-merge-sort-solution

    链表初始化代码:ListNode* origin = new ListNode (0);

    此题要求时间复杂度是o(nlogn),空间复杂度是o(1),快排最高时间复杂度可能到达o(n2),所以用归并排序,数组的归并排序,还需要o(n)的空间复杂度,但链表不用

    归并排序是先划分再融合

    https://www.cnblogs.com/chengxiao/p/6194356.html图解归并排序

    注意的点:因为要拆分成两个链表,所以一定要从中间那个值一定要加null

    class Solution {
    public:
        ListNode* sortList(ListNode* head) {
            if(head == NULL || head->next == NULL)
                return head;
            ListNode* slow = head;
            ListNode* fast = head;
            while(fast->next && fast->next->next){
                slow = slow->next;
                fast = fast->next->next;
            }
            ListNode* newhead = slow->next;
            slow->next = NULL;
            ListNode* p1 = sortList(head);
            ListNode* p2 = sortList(newhead);
            return merge(p1,p2);
        }
        ListNode* merge(ListNode* p1,ListNode* p2){
            ListNode* dummy = new ListNode(-1);
            ListNode* p = dummy;
            while(p1 != NULL && p2 != NULL){
                if(p1->val < p2->val){
                    p->next = p1;
                    p1 = p1->next;
                    p = p->next;
                }
                else{
                    p->next = p2;
                    p2 = p2->next;
                    p = p->next;
                }
            }
            if(p1)
                p->next = p1;
            else
                p->next = p2;
            return dummy->next;
        }
    };
  • 相关阅读:
    简易的观察者模式
    SSM项目实战 之 权限管理系统
    SSM项目实战 之 Shiro
    SSM项目实战 之 Maven
    SSM项目实战 之 EasyUI
    Oracle复习思路
    Oracle存储过程 函数 计算使用资源
    Mybatis笔记(二)
    Mybatis笔记(一)
    Oracle表空间 与 分页
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/9675205.html
Copyright © 2011-2022 走看看