设计一个递归算法,删除不带头结点的单链表中所有值为x的结点。
算法思想:
- 如果链表为空,直接返回。
- 如果当前结点的值等于x,将当前结点删除,并递归删除下一个结点。
- 如果当前结点的值不等于x,递归删除下一个结点。
代码:
void Del_x_3(LinkList &L,ElemType x){
LNode *p;
if(L==NULL) return ;
if(L->data==x){
p=L;
L=L->next;
free(p);
Del_x_3(L,x); //L=L->next
}
else Del_x_3(L->next,x);
}
另:
void deleteNode(Node *p, int x) {
if (p == NULL) return;
if (p->data == x) {
Node *q = p;
p = p->next;
delete q;
deleteNode(p, x); // p=p->next
} else {
deleteNode(p->next, x);
}
}