有双向循环链表结点定义为
struct node
{ int data;
struct node *front*next;
};
有两个双向循环链表AB知道其头指针为pHeadApHeadB请写一函数将两链表中data值相同的结点删除
BOOL DeteleNode(Node *pHeader DataType Value)
{
if (pHeader == NULL) return;
BOOL bRet = FALSE;
Node *pNode = pHead;
while (pNode != NULL)
{
if (pNode>data == Value)
{
if (pNode>front == NULL)
{
pHeader = pNode>next;
pHeader>front = NULL;
}
else
{
if (pNode>next != NULL)
{
pNode>next>front = pNode>front;
}
pNode>front>next = pNode>next;
}
Node *pNextNode = pNode>next;
delete pNode;
pNode = pNextNode;
bRet = TRUE;
//不要break或return 删除所有
}
else
{
pNode = pNode>next;
}
}
return bRet;
}
void DE(Node *pHeadA Node *pHeadB)
{
if (pHeadA == NULL || pHeadB == NULL)
{
return;
}
Node *pNode = pHeadA;
while (pNode != NULL)
{
if (DeteleNode(pHeadB pNode>data))
{
if (pNode>front == NULL)
{
pHeadA = pNode>next;
pHeadA>front = NULL;
}
else
{
pNode>front>next = pNode>next;
if (pNode>next != NULL)
{
pNode>next>front = pNode>front;
}
}
Node *pNextNode = pNode>next;
delete pNode;
pNode = pNextNode;
}
else
{
pNode = pNode>next;
}
}
}