美文网首页
148 排序链表

148 排序链表

作者: ColdRomantic | 来源:发表于2020-06-07 00:09 被阅读0次

148. 排序链表
要求:时间复杂度 O(NlogN), 空间O(1)
采用归并排序
我们使用快慢指针 来定位单链表中间的位置

// 快慢指针 + 归并排序 Nlog(N)
    ListNode* sortList(ListNode* head) {
        if(head == NULL || head->next == NULL){
            return head;
        }
        // 使用快慢指针,获取单链表中间的位置
        ListNode *mid=head, *fast=head->next;
        while(true){
            if(fast->next == NULL){
                break;
            }
            fast = fast->next; 
            if(fast->next == NULL){
                break;
            }
            fast = fast->next;
            mid = mid->next;   
        }
        ListNode* second = mid->next;
        mid->next = NULL;
        return mergeTwoOrderedList(sortList(head), sortList(second));
    }
    // 递归合并
    ListNode* mergeTwoOrderedList(ListNode* l1, ListNode* l2){
        if(l1==NULL){
            return l2;
        }
        if(l2==NULL){
            return l1;
        }
        if(l1->val <l2->val){
           l1->next=mergeTwoOrderedList(l1->next, l2);
           return l1;
        }else{
           l2->next=mergeTwoOrderedList(l1, l2->next);
           return l2;
        }
    }

相关文章

  • LeetCode-148-排序链表

    LeetCode-148-排序链表 148. 排序链表[https://leetcode-cn.com/probl...

  • 链表续

    148. 排序链表

  • 148. 排序链表

    148. 排序链表

  • 148 排序链表

    148. 排序链表要求:时间复杂度 O(NlogN), 空间O(1)采用归并排序我们使用快慢指针 来定位单链表中间的位置

  • leetcode-148.排序链表

    题目 leetcode-148-排序链表 https://leetcode-cn.com/problems/sor...

  • [LeetCode] 148. 排序链表

    148. 排序链表在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例:输入: 4->2...

  • 链表排序问题

    148. Sort List(链表归并排序)Sort a linked list in O(n log n) ti...

  • 归并的思想解决链表排序、多个链表合并问题

    1. 23.合并多个有序链表 与归并排序思想一致,两两合并。 2. 148. 排序链表 思路:与归并思想一致 快慢...

  • 148. 排序链表

    在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 示例 1: 输入: 4->2->1->...

  • 148. 排序链表

    先使用快慢指针将找到链表的中点,然后将链表切分成左右两部分,然后对左右指针递归进行排序,最后归并两个已经排序的链表...

网友评论

      本文标题:148 排序链表

      本文链接:https://www.haomeiwen.com/subject/pvlqtktx.html