递归——删除单链表中值为x的元素的结点

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

#include
using namespace std;

typedef struct LNode{
	int data;
	struct LNode *next;
	LNode(int data):data(data),next(NULL){};
}LNode,*LinkList;

LinkList CreateLinkList(int len){//尾插法建立单链表
	LNode *L = new LNode(-1);
	int val;//用于接收输入的值 
	LNode *p;//定义一个指针p用于接收输入的结点 
	LNode *tail = L;
	while(len--) {
		scanf("%d",&val);
		p = new LNode(val);
		tail->next = p;
		tail = tail->next;
	}
	tail->next = NULL;
	return L;
}
void Delete_x(LinkList &L,int x){//将链表中值为x的结点删除 (注意体会加与不加引用的区别) 
	if(L == NULL){
		return;//若输入节点为空,返回NULL 
	}
	LNode *p;
	if(L->data == x){//如果当前L的元素为x 
		p=L;
		L=L->next;//实际L的值是L->next   即L->next = L->next->next,进行了指针域的赋值操作,绕过了p所指的结点,指向了p的下一个结点 
		free(p);
		Delete_x(L,x);
	}
	else{
		Delete_x(L->next,x);
	}
}
int main(void){
	int len;
	int x;
	scanf("%d %d",&len,&x);
	LinkList L = CreateLinkList(len);
	Delete_x(L->next,x);
	LNode *p=L->next;
	while(p != NULL) {
		printf("%d ",p->data); 
		p=p->next;
	}
	return 0;
	
	
}

你可能感兴趣的:(递归,c++,数据结构,c语言)