美文网首页
148. 排序链表

148. 排序链表

作者: 侯俊同学 | 来源:发表于2019-08-19 14:29 被阅读0次

先使用快慢指针将找到链表的中点,然后将链表切分成左右两部分,然后对左右指针递归进行排序,最后归并两个已经排序的链表。递归返回的条件是head->next==NULL;

class Solution {
public:
    ListNode* sortList(ListNode* head) { 
        if(head == NULL || head->next==NULL) return head;
        ListNode * slow = head,* fast = head,*pre = NULL;
        while(fast && fast->next){
            pre = slow;
            slow = slow->next;
            fast = fast->next->next;
        }
        pre->next = NULL;//断开
        return merge(sortList(head),sortList(slow));
    }
    
    ListNode * merge(ListNode *left,ListNode *right){
        ListNode *p = new ListNode(-1);
        ListNode *res = p;
        while(left!=NULL && right !=NULL){
            if(left->val <= right->val) {
                res->next = left;
                left = left->next;
            }else{
                res->next = right;
                right = right->next;
            }
            res = res->next;
        }
        
        if(left!=NULL) res->next = left;
        if(right!=NULL) res->next = right;
        //res = p->next;
        //free(p);
        //p=NULL;
        return p->next;
    }
}; 

相关文章

  • 链表续

    148. 排序链表

  • 148. 排序链表

    148. 排序链表

  • LeetCode-148-排序链表

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

  • 148 排序链表

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

  • 链表排序问题

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

  • [LeetCode] 148. 排序链表

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

  • python实现leetcode之148. 排序链表

    解题思路 计算长度找到中点一分为二,分开排序然后归并 148. 排序链表[https://leetcode-cn....

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

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

  • 148. 排序链表

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

  • 148. 排序链表

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

网友评论

      本文标题:148. 排序链表

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