头插法,尾插法,创建单链表,然后删除所有结点值为x的结点
实现代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode;
//头插法
void Create1(LNode *&L,int a[],int n){
LNode *p;
int i;
L=(LNode*)malloc(sizeof(LNode));
L->data=a[0];
L->next=NULL;
for(i=1;i<n;i++){
p=(LNode*)malloc(sizeof(LNode));
p->data=a[i];
p->next=L->next;
L->next=p;
}
}
//尾插法
void Create2(LNode *&L,int a[],int n){
LNode *r,*s;
int i;
L=(LNode*)malloc(sizeof(LNode));
L->data=a[0];
r=L;
L->next=NULL;
for(i=1;i<n;++i){
s=(LNode*)malloc(sizeof(LNode));
s->data=a[i];
r->next=s;
r=s;//或者这样r=r->next;
}
r->next=NULL;
}
void Delete_x(LNode *&L,int x){
LNode *p;
if(L==NULL)
return;
if(L->data==x){
p=L;
L=L->next;
free(p);
Delete_x(L,x);
}else{
Delete_x(L->next,x);
}
}
void ShowL(LNode *L){
while(L!=NULL){
printf("%d ",L->data);
L=L->next;
}
}
int main(int argc, char *argv[])
{
int i,a[5]={1,3,4,1,7},b[5]={1,3,4,1,7};
LNode *L1=NULL,*L2=NULL;
Create1(L1,a,5);//头插法创建单链表
Create2(L2,b,5);//尾插法创建单链表
Delete_x(L1,1);//删除所有的1
Delete_x(L2,1);//删除所有的1
ShowL(L1);
printf("\n");
ShowL(L2);
printf("\n");
return 0;
}
输出结果:
7 4 3
3 4 7
请按任意键继续. . .