【Leetcode刷题笔记】148. Sort List 进行链表的排序,不使用额外的存储空间

  • 使用mergeSort思想来进行链表排序;
  • 主要思想:分治法
ListNode* sortList(ListNode *head){
	//当前为空或者只有一个节点
	ListNode *slow = head;
	ListNode *fast = head;
	//使用两个指针,一快一慢,来找到当前链表的中段,然后二分到两块进行处理
	while(fast&&fast->next&&fast->next->next){
		fast=fast->next->next;
		slow=slow->next;
	}
	//fast 每次走两步 slow每次走一步,当fast到达尾部时,则slow刚好走到中间
	//走到中间之后给截断
	fast = slow->next;
	slow->next =NULL;
	
}

ListNode* merge(ListNode *head1,ListNode *head2){
	//使用指针保存
	ListNode head(-1);
	ListNode *p = head;
	while(head1&&head2){
		if(head1<head2){
		p->next = head1;
		head1=head1->next;
	}else{
		p->next = head2;
		head2=head2->next;
	}
	p=p->next;
	}
	if(head1)
	p->next = head1;
	if(head2)
	p->next = head2;
	//因为定义的类型,所有这里不能够使用->next来表示next
	return head.next;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值