设计一个递归算法,删除不带头结点的单链表中所有值为x的结点
具体的代码如下:
void Del_X_3(LinkList &L,ElemType x)
{
LNode *p; //p指向待删除结点,
if(L==NULL) //递归出口
return ;
if(L->data==x)
{
p=L;
L=L->next; //删除L,并让L指向下一结点
free(p);
Del_X_3(L,x);
}else
{
Del_X_3(L->next,x);//递归调用
}
}
PS:对于这个算法,我最不能理解的是它和普通的算法相比,就是没有让要删除的L节点指向要删除节点的下一个节点,实际上这是因为我们要删除某个节点的时候,传入的是要删除节点的上一个节点,也就是说传入的是L->next,然后删除的时候就相当于执行了L->next=L->next->next;
这个我是参考了网上的一片文章:http://www.cnblogs.com/raby/p/5886714.html