递归算法删除值为x的节点
本题为苏州大学872考研真题(2010.3),现与大家讨论。
方法一
void Delete_x(LinkList &L,ElemType x){
if(L==NULL)
return;
else if(L->data==x){
p = L;
L = L->next;
free(p);
Delete_x(L,x);
}
else
Delete_x(L->next,x);
}
该方法存疑,当有且仅有第二个节点值为x,在第二层递归中删除该节点,第一个节点能指向第三个节点吗?
方法二
LinkList Delete_x(LinkList &L,ElemType x){
if(L==NULL)
return L;
LNode *p = L->next;
if(L->data==x){
free(L);
return Delete_x(p,x);
}
else{
L->next = Delete_x(L,x);
return L;
}
}