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;
        }
    };
  • 相关阅读:
    【队列】队列的分类和实现
    【JSP】EL表达式语言
    【JSP】JSP的介绍和基本原理
    【JSP】JSP Action动作标签
    【Servlet】关于RequestDispatcher的原理
    【JSP】JSP指令
    【JSP】JSP中的Java脚本
    【算法】表达式求值--逆波兰算法介绍
    C语言指针详解
    移动架构-MVVM框架
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/9675205.html
Copyright © 2011-2022 走看看