第一种遍历整个L,遇到data为x就删除,
需要三个指针,pre初始值指向头结点,保持指向为p的前驱结点。
p指向首元结点,用来遍历整个链表。
q用来做删除结点操作指针
Del_x(Linklist &L,Elemtype x){
Lnode *p=L->next,*pre=L,*q;
while(p!=NULL){
if(p->data==x){
q=p; // q指向该结点
p=p->next;
pre->next=p; // 删除*q结点
free(p);// 释放*q结点
}
else{// 否则,pre和p后移
pre=pre->next;
p=p->next;
}
}
}
第二种尾插法实现删除操作
同样需要三个指针,
p初值指向首元结点,依次遍历整个链表
r初值指向头结点,程序结束后指向尾结点
q指向需要删除的p结点,用来做free操作
Del_x(Linklist &L,Elemtype x){
Lnode *p=L->next,*r=L,*q;
while(p!=NULL){
if(p->data==x){//*p结点的值不为x时将其链接到L的尾部
r->next=p; //
r=p;
p=p->next;//继续扫描链表
}
else{// 否则,q指向p,p指向p的next,释放q
q=p;
p=p->next;
free(q);
}
}r->next=NULL;//插入结束后尾结点的next指向NULL
}