#include<stdio.h>
#include<stdlib.h>
typedef struct Link {
int element;
struct Link* next;
}link;
//初始化一个存储{1,2,3,4...}单链表
link * InitLink(){
link* p = NULL; //初始化头指针
link* temp = (link*)malloc(sizeof(link)); //为节点分配空间
temp->element = 1; //初始化首元节点
temp->next = NULL;
p = temp; //让头指针指向首元节点
for (int i = 2; i <= 10; i++) {
link* a = (link*)malloc(sizeof(link));
a->element = i;
a->next = NULL;
temp->next = a;
temp = temp->next;
}
return p;
}
//打印单链表所有的元素
void DisplayLink(link * p) {
link* s = p;
while (s) {
printf("%d\t", s->element);
s = s->next;
}
printf("\n");
}
//插入元素操作
link* AddLink(link* p,int element,int place) {
if (place < 1) {
printf("插入位置无效\n");
return p;
}
link* temp = p;
if (place == 1) {
//创建插入元素的节点
link* s = (link*)malloc(sizeof(link));
s->element = element;
p = s;
s->next = temp;
return p;
}
else {
for (int i = 1; i < place-1; i++) {
temp = temp->next;
if (temp == NULL) {
printf("插入位置无效\n");
return p;
}
}
link* s = (link*)malloc(sizeof(link));
s->element = element;
s->next = temp->next;
temp->next = s;
return p;
}
}
//删除元素操作
link* DelLink(link* p, int place) {
if (place < 1) {
printf("删除位置错误\n");
return p;
}
if (place == 1) {
p = p->next;
return p;
}
else {
link* temp = p;
for (int i = 1; i < place-1; i++) {
temp = temp->next;
if (temp->next == NULL) {
printf("删除位置错误\n");
return p;
}
}
temp->next = temp->next->next;
return p;
}
}
//查找元素操作
void FindLink(link* p, int element) {
link* temp = p;
int i = 1;
while (temp) {
if (temp->element == element) {
printf("元素已查找到,位置为%d\n", i);
return 0;
}
temp = temp->next;
i++;
}
printf("元素不存在\n");
}
//更新元素操作
link* UpdateLink(link* p, int element, int place) {
if (place < 1) {
printf("位置错误\n");
return p;
}
link* temp = p;
for (int i = 1; i < place ; i++) {
temp = temp->next;
if (temp == NULL) {
printf("位置错误\n");
return p;
}
}
temp->element = element;
return p;
}
int main() {
link* a = InitLink();
DisplayLink(a);
a = AddLink(a, 520, 10);
DisplayLink(a);
FindLink(a, 520);
a = UpdateLink(a, 521, 10);
a = DelLink(a, 11);
DisplayLink(a);
}