由于该单链表拥有头结点,所有思路很明确: 用尾插法(或者头插法)创建链表,再进行删除。直接上代码
void del(Linklist &L, ElemType &x)
{
Lode *p=L->next,*r=L,*q; //用q来保存删除的节点,r是指向尾部节点
while(p!=NULL)
{
if(p->data!=x)
{
r->next=p; //以下两句是尾插的思想code
r=p;
p=p->next; ///扫描L向后,循环
}
else
{
q=p;
p=p->next;
free(q); //删除操作,释放空间
}
}
r->next=null;
}
思路: 用p指针扫描L的所以节点,当它的值不为x时候将其链接到L之后,否则释放。
因为尾插法实现的前提是不和以前顺序的元素一致,所以才用反面思考。