设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点 -001

设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点

总结

​ 由于L为引用,是直接对原链表进行操作,所以不会断链。

​ 参数引用是L->next,自我调用函数执行完后,虽然p所指结点被删除了,但是返回的依然是L->next。返回后,整个表是连续的。外层函数并不知道,内层调用时,L移动了位置。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;


void Del_X_3(LinkList &L,ElemType x){
LNode *p; //p指向待删除结点
if(L==NULL)
return;
if(L->data==x){
p=L;
L=L->next;
delete p;
Del_X_3(L,x);
}
else //若L所指结点值不为x
Del_X_3(L->next,x);
}

评论