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

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

分析

有序的单边表,首先以第一个链表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->datadata){              
	 		 	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;
}

你可能感兴趣的:(数据结构)