(1)递归模型如下
- 终止条件:若L为空表,return;
- 递归主体:若L-data==x,则删除L结点,Del_x(L->next,x); 若L->data!=x,则Del(L->next,x);
(2)代码如下
void Del_x(LinkList &L,ElemType x){
LNode *q;
if(L==NULL) return;
//删除结点x;
if(L->data==x){
q=L;
L=L->next;
free(q);
Del_x(L,x);
}
//结点向后移动
else{
Del_x(L->next,x);
}
}
(3)关于递归调用不断链的问题
- 首先函数为Del_x(Linklist &L,ElemType x),这里的形参L为引用类型;
- 执行Del_x(L->next,x)时,将L->next的值传递给形参L,相当于&L=L->next;此时L就是L->next的一个别名 [我们可以把当前的L记做L1,即&L1=L->next ]
- 执行代码L=L->next [可以看做L1=L1->next] ,相当于[用L1代替L] L-next=L-next->next;