单链表删除值为x的结点
题目:在带头结点的单链表L中,删除所有值为x的结点,并释放其空间,假设值为x的结点不唯一,试编写算法实现上述操作。
算法思想:循环链表,标记待删除的结点x,并用p结点来覆盖标记x的结点,若循环到的结点不是x,则p和p的前驱结点分别向后移动一位,然后再次进行新的循环。
代码实现:
void Del_x(Linklist &L, ElemType x){
LNode *p=L->next, *pre=L, *q;
//p用来遍历链表
//pre指向前趋
//q指针指向结点x,标记它并删除它
while(p!=Null){
if(p->data==x){ //p所指的data域为x,即找到了x
q=p;
p=p->next; //用p覆盖q,q就没了
pre->=p;
free(q);
}
else{
pre=p; //若没有找到x,则p和pre两个结点向后移动一位
p=p->next;
}
}
}