#include<stdio.h>
#include<stdlib.h>
#define bool int
#define false 0
#define true 1
typedef int datatype;
int n;
typedef struct lnode
{
datatype data;
struct lnode *next;
}LNode,*LinkList;
LinkList L,H;
LinkList creat_LinkList()
{
LinkList L = NULL;
LNode *s,*r=NULL;
int x;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
s=(LNode *)malloc(sizeof(LNode));
s->data = x;
if(L == NULL) L=s;
else r->next = s;
r = s;
}
if(r!=NULL) r->next= NULL;
return L;
}
int length_LinkList(LinkList L)
{
LNode * p =L;
int j=0;
while(p->next)
{
p = p->next;
j++;
}
return j;
}
void print_Link(LinkList H)
{
LNode *p= H;
while(p->next)
{
p=p->next;
printf("%d ",p->data);
}
printf("\n");
}
bool search_x(LinkList H,int x)
{
LNode *p= H;
while(p->next!=NULL)
{
p = p->next;
if(p->data==x) return true;
}
return false;
}
void insert_LinkList(LinkList H,int i,int x)
{
LNode *p,*s;
p=H;
int j=0;
while(p->next!=NULL&&j<i-1){
p=p->next;
j++;
}
if(j!=i-1) p=NULL;
if(p==NULL) printf("参数i错误:\n");
else
{
s=(LNode *)malloc(sizeof(LNode));
s->data = x;
s->next = p->next;
p->next =s;
}
}
bool delete_x(LinkList H,int x)
{
LinkList p,s;
p=H;
while(p->next)
{
s=p;
p = p->next;
if(p->data==x){
s->next = p->next;
return true;
}
}
return false;
}
int main()
{
H = (LNode *)malloc(sizeof(LNode));
printf("请输入你需要输入多少数据:\n");
scanf("%d",&n);
H->next=creat_LinkList();
printf("该链表中有多少元素\n");
printf("%d\n",length_LinkList(H));
printf("该链表中的元素的数据具体是:\n");
print_Link(H);
int m;
printf("输入你想要查找的元素\n");
scanf("%d",&m);
if(search_x(H,m)) printf("%d\n",m);
else printf("链表中不存在该元素\n");
int i,x;
printf("请输入你要插入的位置和数据\n");
scanf("%d%d",&i,&x);
insert_LinkList(H,i,x);
printf("该链表中的元素的数据具体是:\n");
print_Link(H);
printf("请输入你要删除的数据\n");
int x1,a;
scanf("%d",&x1);
if(!delete_x(H,x1)) printf("没有相关的元素\n");
printf("该链表中的元素的数据具体是:\n");
print_Link(H);
}