合并两个有序单链表的排序算法

合并两个有序单链表的排序算法

分析

有序的单边表,首先以第一个链表list1 为基准,循环与链表list2 作比较。

  • 假如,第一个链表先结束,直接将第二个链表的后面部分连接在list1之后。

  • 假如第二个先结束,那就不用遍历了。直接结束。
    这样做的话,时间复杂度为list1的长度,即为O(n),
    当然,以断的链表为准基的话,时间复杂度最快。

代码

// 合并两个 有序的单链表,让其有序
LinkList MARGELIST(LinkList l1,LinkList l2){   
	 LinkList list ,p,q,r,s;    
	 q=l2;    
	 list =l1;    
	 p=list;    
	 r=p;    
	 while (p!=NULL&&q!=NULL) {   	 		
	 	 if (p->data<q->data){              
	 		 	r=p;              
	 		 	p=p->link;          
	 		 }else{              
	 		 	s=q;              
	 		 	q=q->link;              
	 		 	s->link=p;    
	 		 	// 这里为什么这么写,主要是为了解决list1的第一个结点
                                // 就比list2的第一个结点大的时候              
	 		 	if (r==p) {     
	 		 		r=s;                  
	 		 		list=r;              
	 		 	}else{                 
	 		 		r->link=s;                   
	 		 		r=s;                
	 		 	}          
	 		 }        
	 }    
	 if (q!=NULL){        
	 	r->link=q;    
	 }        
	 return list;
}
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值