程序写的比较混乱,而且没有考虑程序运行的效率。如有问题,请大家共同讨论
struct DNode
{
DNode *pre;
DNode *next;
int data;
};
typedef DNode* DNodeTree;
void ShanChu(DNodeTree &phead1,DNodeTree &phead2)
{
int temp1=0,temp2=0;
DNode *p1,*p2,*p_temp1,*p_temp2;
p1=phead1;
p2=phead2;
int data;
while(1)
{
p2=p2->next;
if (p2==NULL)
{
break;
}
temp2++;
}
int x=temp2; //用于比较phead2是否删了节点
DNode *f,*f1;
p1=phead1;
p2=phead2;
while (p1)
{
p_temp1=p1;
p1=p1->next;
while(p2)
{
p_temp2=p2;
p2=p2->next;
if ((p2==NULL))
{
break;
}
if (p1==NULL)
{
break;
}
if (p1->data==p2->data)
{
if (p2->next==NULL)
{
p_temp2->next=NULL;
temp2--;
}
else
{
p_temp2->next=p2->next;
p2->next->pre=p_temp2;
//free(p2);
p2=p_temp2;
temp2--;
}
}
}
if (p1==NULL)
{
break;
}
p2=phead2;
if (temp2<x)//如果第二个链表中删除了节点,说明temp已经变小。进行下面的程序
{
x=temp2;
if (p1->next==NULL)
{
p_temp1->next=NULL;
}
else
{
// *p=p1;
data=p1->data;
p_temp1->next=p1->next;
p1->next->pre=p_temp1;
p1=p_temp1;
f=p_temp1;
f1=p1;
while(f1) //循环第一个链表,找出所有相同的点进行删除
{
if (f1->data==data)//如果有相同的节点进行删除,没有指向下一个节点
{
if (f1->next==NULL)
{
f->next=NULL;
}
else
{
f->next=f1->next;
f1->next->pre=f;
f1=f->next;
}
}
else
{
f=f1;
f1=f1->next;
}
}
}
}
}
}