LeetCode : Sort List

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

ListNode *Merge(ListNode *list01,ListNode *list02){
		ListNode *head=NULL,*pointer=NULL;
		if(NULL!=list01&&NULL!=list02&&list01->val<list02->val){
		
			pointer=list01;
			head=list01;
			list01=list01->next;
		}
		else if(NULL!=list01&&NULL!=list02){
		
			pointer=list02;
			head=list02;
			list02=list02->next;
		}
		while (list01&&list02)
		{
			if(list01->val<list02->val){
				pointer->next=list01;
				pointer=list01;
				list01=list01->next;
			}
			else
			{
				pointer->next=list02;
				pointer=list02;
				list02=list02->next;
			}
		}
		if(pointer){
			pointer->next=list01==NULL?list02:list01;
		}else
		{
			head=list01==NULL?list02:list01;
		}
		return head;
	}
    ListNode *sortList(ListNode *head) {
		ListNode *start1=head,*end1=NULL,*low=head,*fast=head;
		ListNode *start2=NULL,*end2=NULL;
		if(head==NULL) return NULL;
		while (fast->next&&fast->next->next)
		{
			low=low->next;
			fast=fast->next->next;
		}
		if(NULL==low->next){
		
			return low;
		}
		else
		{
			start1=head;
			start2=low->next;
			low->next=NULL;
		}
		return Merge(sortList(start1),sortList(start2));
		
    }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值