假设以带头结点的单链表表示有序表,单链表的类型定义如下:
typedef struct node
DataType data;
struct node*next
LinkNode,*LinkList;
编写算法,从有序表A中删除所有和有序表B中元素相同的结点。
参考答案:参考答案:一:
void fCD(LinkList ha,LinkList hb)
{ //hb和hb分剐为存放A和B有序链表的头指针
LinkList p,q,r;
p=ha;
q=hb—>next;
while(p—>next&&q){
if(p—>next—>data<q->data)
p=p—>next;
else{
if(p—>next—>data==q—>data){
r=p—>next;
p—>next=r—>next;
free(r);
} //从A表删除相同的元素结点
q=q—>next;
}
}
}
参考答案:二:
void fCD(LinkList ha,LinkList hb)
{ //hb和hb分别为存放A和B有序链表的头指针
LinkList p,q,r;
r=ha;p=ha—>next;
q=hb—>next;
while(p&&q){
if(p—>data<q—>data){
r=p;p=p->next;
}else{
if(p—>data==q—>data){
r—>next=p—>next;
free(p);
p=r—>next;
} //从A表删除相同的元素结点
q=q—>next
}
}
}