在带头节点的单链表L中,删除所有值为x的结点,并释放其空间,假设值为x的结点不唯一,
是编写算法实现上述操作。
双指针,用p从头至尾扫描单链表,pre指向*p结点的前驱,若p所指结点的值为x,则删除,并让p指向下一个结点,否则让pre,p指针同步向后移动一位。
void del(Linklist &L,int x){
LNode *p=L->next,*pre=L;
//p指向第一个结点,pre指向头结点
while(p!=NULL){
if(p->data==x){
//完成删除和建立新的链接
q=p;
p=p->next;
pre->next=p;
free(q);
}else{
pre=p;
p=p->next;
}
}
}