对
题的条件作以下两点修改
对单链表重新编写求得表C的算法
() 假设在同一表(A或B)中可能存在值相同的元素但要求新生成的表C中的元素值各不相同
() 利用原表(A表或B表)中的结点构成表C并释放A表中的无用结点空间
解
()
// AB求交结果放在C表中并删除相同元素
Status ListCrossDelSame_L(LinkList &ALinkList &BLinkList &C)
{
LinkList papbqaqbpt;
pa=A;
pb=B;
qa=pa;// 保存pa的前驱指针
qb=pb;// 保存pb的前驱指针
pa=pa>next;
pb=pb>next;
C=A;
while(pa&&pb){
if(pa>data<pb>data){
pt=pa;
pa=pa>next;
qa>next=pa;
free(pt);
}
else
if(pa>data>pb>data){
pt=pb;
pb=pb>next;
qb>next=pb;
free(pt);
}
else{
if(pa>data==qa>data){
pt=pa;
pa=pa>next;
qa>next=pa;
free(pt);
}
else{
qa=pa;
pa=pa>next;
}
}
}
while(pa){
pt=pa;
pa=pa>next;
qa>next=pa;
free(pt);
}
while(pb){
pt=pb;
pb=pb>next;
qb>next=pb;
free(pt);
}
pb=B;
free(pb);
return OK;
}
()
// AB求交结果放在A表中并删除相同元素
Status ListCrossDelSame_L(LinkList &ALinkList &B)
{
LinkList papbqaqbpt;
pa=A;
pb=B;
qa=pa;// 保存pa的前驱指针
qb=pb;// 保存pb的前驱指针
pa=pa>next;
pb=pb>next;
while(pa&&pb){
if(pa>data<pb>data){
pt=pa;
pa=pa>next;
qa>next=pa;
free(pt);
}
else
if(pa>data>pb>data){
pt=pb;
pb=pb>next;
qb>next=pb;
free(pt);
}
else{
if(pa>data==qa>data){
pt=pa;
pa=pa>next;
qa>next=pa;
free(pt);
}
else{
qa=pa;
pa=pa>next;
}
}
}
while(pa){
pt=pa;
pa=pa>next;
qa>next=pa;
free(pt);
}
while(pb){
pt=pb;
pb=pb>next;
qb>next=pb;
free(pt);
}
pb=B;
free(pb);
return OK;
}
[] [] []