Sort List

原创 2016年06月01日 10:44:32

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

思路:使用归并的方式来实现链表的排序。先将链表一直拆分到一个个元素,对于每一个元素都是有序的,然后两两进行合并成一个有序链表。

解决代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* sortList(ListNode* head) {//先将链表分成两个部分,然后再将两个链表进行merge
        if(head==NULL || head->next==NULL)
            return head;
        ListNode *mid=findmid(head);
        ListNode *right=sortList(mid->next);
        mid->next=NULL;
        ListNode *left=sortList(head);
        return merge(left,right);
    }
    //返回一个链表的中间节点
    ListNode *findmid(ListNode *head)
    {
        ListNode *slow=head,*fast=head->next;
        while(fast!=NULL&&fast->next!=NULL)
        {
            slow=slow->next;
            fast=fast->next->next;
        }
        cout<<slow->val<<endl;
        return slow;
    }
    //合并两个有序链表
    ListNode *merge(ListNode *slow,ListNode *fast)
    {
        ListNode *res=new ListNode(0);
        ListNode *slo=res;
        while(slow&&fast)
        {
            if(slow->val<=fast->val)
            {
                slo->next=slow;
                slow=slow->next;
            }
            else
            {
                slo->next=fast;
                fast=fast->next;
            }
            slo=slo->next;
        }
        if(slow)
            slo->next=slow;
        else if(fast)
            slo->next=fast;
        return res->next;
    }
    
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C# List.sort排序详解(多权重,升序降序)

很多人可能喜欢Linq的orderBy排序,可惜U3D里面linq在Ios上会报错,所以就必须使用list的排序。 其实理解了并不难       升序降序比较 ...

STL 中 sort map list tree 函数用法简介,数据结构的库函数

1.sort 函数用法简介 做 ACM 题的时候,排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的 O(n^2) 排序,不但程序容易超时,而且浪费宝贵的比赛时间,还很有可能写错。 STL ...

java中list排序:Collections.sort() 排序函数的用法

用Collections.sort方法对list排序有两种方法 第一种是list中的对象实现Comparable接口,如下:...

hibernate第二天——值类型的集合(set,map,list,bag,sort,order-by),实体类型集合,关联关系,3l类型Long,inverse,级联

1、值类型的集合 集合元素是普通类型 (1)、数据存放类型 Set         HashSet 无序,不重复 List         有序,可重复 Map         键值对    ...

list sort方法调研

stl中的list 是双向链表结构,最近用到其中的sort方法,文档中有这么两段:Sorts *this according tooperator. The sort is stable, that ...

Collections.sort方法对list排序

用Collections.sort方法对list排序有两种方法 第一种是list中的对象实现Comparable接口,如下: /** * 根据order对User排序 */ public c...

[LeetCode]Insertion Sort List

Sort a linked list using insertion sort. /** * Definition for singly-linked list. * pub...

[leetcode]Insertion Sort List

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Sort List
举报原因:
原因补充:

(最多只允许输入30个字)