合并两个有序单链表的排序算法
分析
有序的单边表,首先以第一个链表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;
}