1.设计一个递归算法,删除不带头结点的单链表工中所有值为x的结点。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<vector>
#include<queue>
#include<set>
using namespace std;
// 链表节点结构
typedef struct Node{
int data;
struct Node * next;
Node(): next(NULL){};
Node(int data):data(data), next(NULL){};
}Node, *LinkList;
// 递归删除所有x
void deleteX(LinkList &L, int x){
if(L==NULL){
return;
}
if(L->data == x){
Node *p = L;
L = L->next;
free(p);
deleteX(L, x);
}else{
deleteX(L->next,x);
}
}
// 头插法创建无头链表
void createLinkList(vector<int> V, LinkList &L){
for(int v : V){
Node *p = new Node(v);
p->next = L;
L = p;
}
}
// 输出单链表
void show(LinkList L){
Node *p = L;
while(p){
cout<<p->data<<endl;
p = p->next;
}
}
int main(){
int a[]={1,2,1,4,1,2};
vector<int> V(a, a+6);
LinkList L;
createLinkList(V, L);
show(L);
deleteX(L, 1);
return 0;
}