有序单链表的合并
将带表头的有序单链表La和Lb合并成Lc:
struct node *merge(struct node *La,struct node *Lb){
struct node *pa,*pb,*pc; //声明三个指针
pa=La->next; //pa指针指向La的首结点
pb=Lb->next; //pb指针指向Lb的首结点
pc=La; //使用表La的头结点,pc为尾指针
free(Lb); //释放表Lb的头结点(同理可以用Lb的头结点,释放La的头结点)
while(pa&&pb){ //表La和表Lb均有结点(两者同样长度的部分)
if(pa->data<=pb->data){ // 如果pa指向的数据域小于或等于pb指向的数据域
pc->next=pa; //(pa原来指向的结点)插在表Lc的尾结点之后(就是pc的下一个)
pc=pa; //(pa原来指向的结点)变成表Lc的新尾结点
pa=pa->next; //pa结点移向La下一个结点
}
else{
pc->next=pb; //(pb原来指向的结点)插在表Lc的尾结点之后(就是pc的下一个)
pc=pb; //(pb原来指向的结点)变成表Lc的新尾结点
pb=pb->next; //pa结点移向La下一个结点
}
if(pa){ //表La比表Lb长
pc->next=pa; //插入表La的剩余段
}
else{ //表Lb比表La长
pc->next=pb; //插入表Lb的剩余段
}
return La;
}