#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int data;
node* nxet;
}Lnode,*Hnode;
int InitList(Lnode &L) //初始化链表
{
Lnode *p = (Lnode*)malloc(sizeof(Lnode));
if (!p)
{
printf("创建链表失败\n");
return -1;
}
L.nxet = p; //创建一个头结点
p->nxet = NULL;
return 0;
}
int Initdata(Lnode& L) //初始化数据
{
printf("你想输入几个值\n");
int a;
scanf_s("%d", &a);
Lnode* p, * q;
p = L.nxet; //头结点不存储数据
for (int i = 1; i <= a; i++)
{
q = (Lnode*)malloc(sizeof(Lnode));
if (!q)
{
printf("创建链表失败\n");
return -1;
}
printf("请输入第%d的值", i);
scanf_s("%d", &q->data);
p->nxet = q;
p = q;
}
p->nxet = NULL;
return 0;
}
int Getelem(Lnode& L) //查找元素
{
printf("请输入你想查找的元素\n");
int a;
scanf_s("%d", &a);
Lnode* p = L.nxet;
while (p != NULL)
{
if (a == p->data)
{
printf("找到该元素\n");
return 0;
}
p = p->nxet;
}
printf("未找到该元素\n");
return -1;
}
int Deletedata(Lnode& L) //删除元素
{
printf("你想删除哪个元素\n");
int a;
scanf_s("%d", &a);
Lnode* p = L.nxet;
Lnode* q = L.nxet;
if (a == q->data) //删除的元素在首元结点
{
L.nxet = q->nxet->nxet;
printf("删除成功\n");
return 0;
}
while (p != NULL)
{
q = p;
p = p->nxet;
if (a == p->data)
{
q->nxet = p->nxet;
printf("删除成功\n");
return 0;
}
}
printf("删除失败\n");
return -1;
}
int Sertdata(Lnode& L)//插入元素
{
printf("你想在哪个元素之后插入\n");
int a;
scanf_s("%d", &a);
Lnode* p = L.nxet;
while (p != NULL)
{
if (a == p->data)
{
Lnode* q = (Lnode*)malloc(sizeof(Lnode));
printf("请输入要插入的值\n");
scanf_s("%d", &q->data);
Lnode* temp = p->nxet;
p->nxet = q;
q->nxet = temp;
return 0;
}
p = p->nxet;
}
printf("未找到你想插入位置\n");
return -1;
}
int PrintList(Lnode& L) //遍历链表
{
Lnode* p = L.nxet;
printf("链表数据为:\n");
while (p != NULL)
{
printf("%d\n", p->data);
p = p->nxet;
}
return 0;
}
int main()
{
Lnode L; //创建一个链表
InitList(L);
Initdata(L);
Getelem(L);
Deletedata(L);
Sertdata(L);
PrintList(L);
return 0;
}