#include<stdio.h>
#include <malloc.h>
typedef struct LinkNode {//链表的结点
int data;
struct LinkNode* next;
} LinkNode;
LinkNode* Init_Link() {
LinkNode* head = (LinkNode*)malloc(sizeof(LinkNode));//为头结点分配空间
head->data = -1;//头结点数据赋值
head->next = NULL;//默认为空
return head;
}
void insert_data(LinkNode* link,int data) {//尾插法
if (link==NULL) {
return;
}
if (data == NULL) {
return;
}
LinkNode* new_node = (LinkNode*)malloc(sizeof(LinkNode));//创建要插入的新结点
new_node->data = data;//数据赋值
new_node->next = NULL;
LinkNode* tmp = link;//创建临时结点
while (tmp->next!=NULL) {
tmp = tmp->next;//得到尾部节点tmp
}
tmp->next = new_node;//将结尾结点指向新结点
}
void mid_insert(LinkNode* link,int position,int data) {//在中间位置插入
if (link == NULL) {
return;
}
if (data == NULL) {
return;
}
LinkNode* tmp = link;
for (int i = 0; i < position-1;i++) {
tmp = tmp->next;//得到要插入位置的前一个结点
}
LinkNode* mid_insert_data = (LinkNode*)malloc(sizeof(LinkNode));
mid_insert_data->data = data;//数据赋值
mid_insert_data->next = tmp->next;//先将要插入位置的后一个结点给要插入结点的next
tmp->next = mid_insert_data;//将前一个结点指向新插入的结点
}
void delete_link(LinkNode* link,int position) {
LinkNode* tmp = link;
for (int i = 0; i < position - 1;i++) {
tmp = tmp->next;//为了得到posotion之前的结点
}
LinkNode* node_to_delete = tmp->next;//得到要删除的节点
tmp->next = node_to_delete->next;
free(node_to_delete);
}
void print_Link(LinkNode* link) {
LinkNode* tmp = link->next;
while (tmp!=NULL) {
printf("%d\n",tmp->data);
tmp = tmp->next;
}
}
int main() {
LinkNode* a = Init_Link();
insert_data(a,5);
insert_data(a, 10);
insert_data(a, 20);
print_Link(a);
printf("---------------------------\n");
mid_insert(a,2,99);
print_Link(a);
mid_insert(a, 2, 56);
printf("---------------------------\n");
print_Link(a);
delete_link(a,2);
delete_link(a, 3);
printf("---------------------------\n");
print_Link(a);
return 0;
}