1 /*设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点*/
 2 /*
 3     算法思想:设f(L,x)的功能是删除以L为首结点指针的单链表中所有值等于x的结点,
 4     则显然有f(L->next,x)的功能是删除以L->next为首结点指针的单链表中所有值等于x
 5     的结点。递归模型如下:
 6         终止条件:f(L,x)=不做任何事情        若L为空表
 7         递归主体:f(L,x)=删除*L结点;f(L->next,x);        若L->data == x
 8                  f(L,x)=f(L->next,x)                其他情况
 9 */
10 void Del_X_3(LinkList& L, Elemtype x)
11 {
12     LNode* p;        //指向待删除的结点
13     if (L == NULL)
14         return;        //递归出口
15     if (L->data == x)
16     {
17         p = L;
18         L = L->next;
19         free(p);
20         Del_X_3(L, x);
21     }
22     else
23         Del_X_3(L->next, x);
24 }