王道说下面的代码有BUG,比如当删除的结点p在最后一个元素时,p->next=NULL;
So *q =NULL;
q->data就是错误的,我认为加个判断就行
加个判断即可
/*看着是删除q了,从结果上看就是把p删除了 偷天换日法*/
bool DeleteNode(LNode *p)
{
if(p==NULL)
return false;
LNode *q = p->Next;
if(p->Next==NULL) //此结点p在最后一个位置
{
free(p);//如果将最后一个节点free后,它的前驱结点指向NULL,因为该节点之后已经没有下一个节点了
return true;
}
else
p->Data=q->Data;
p->Next=q->Next;
free(q);
return true;
}
同理前插法也用了偷天换日法。就是插入在p前的话,我直接就插到p上面,后面再copy一个p即可了。