在带头节点的单链表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;}}
}