插入删除单链表指定结点-偷天换日法
王道说下面的代码有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;}elsep->Data=q->Data;p->Next=q->Next;free(q);return true;
}
同理前插法也用了偷天换日法。就是插入在p前的话,我直接就插到p上面,后面再copy一个p即可了。