linklist.h
#ifndef __LINKLIST_H__
#ifndef __LINKLIST_H__
typedef int datatype;
typedef struct lnklst
{
union
{
int len;
datatype data;
}msg;
struct lnklst *next;
}Linklist
Linklist* creat_linklist(void);
void insertFront_linklist(Linklist* head, datatype num);//头插法
void insertBehind_linklist(Linklist* head, datatype num);//尾插法
void Bianli_linklist(Linklist* head);//遍历
void deleteFront_Linklist(Linklist* head);//头删法
void deleteBehind_Linklist(Linklist* head);//尾删法
void insertWei_Linklist(Linklist* head,int n, datatype num);//按位置插入
#endif
linklist.c
Linklist* creat_linklist(void)
{
Linklist* head = (Linklist*)malloc(sizeof(Linklist));
if(NULL == head)
{
printf("头结点创建失败");
return NULL;
}
head->msg.len = 0;
head->next = NULL;
return head;
}
//创建单链表
Linklist* creat_linklist(void)
{
Linklist* head =(Linklist*)malloc(sizeof(Linklist));
if(NULL == head)
{
printf("头结点创建失败");
return NULL;
}
head->msg.len = 0;
head->next = NULL;
return head;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/a32e19846ec647ce885ffb2d29f8025c.png)
//插入数据(头插法)
void insertFront_linklist(Linklist* head, datatype num)
{
Linklist* temp = (Linklist*)malloc(sizeof(Linklist));
if(NULL == temp)
{
printf("创建节点失败\n");
return;
}
temp->msg.data = num;
temp->next = NULL;
temp->next = head->next;
head->next = temp;
head->msg.len++;
return;
}
//尾插法
void insertBehind_linklist(Linklist* head, datatype num)
{
Linklist* temp = (Linklist*)malloc(sizeof(Linklist));
if(NULL == temp)
{
printf("创建节点失败\n");
return;
}
temp->msg.data = num;
temp->next = NULL;
head->msg.len++;
Linklist* p = head;
while(p->next != NULL)
{
p = p->next;
}
p->next = temp;
return;
}
//遍历
void Bianli_linklist(Linklist* head)
{
Linklist* p = head;
while(p->next != NULL)
{
p = p->next;
printf("%d\t",p->msg.data);
}
printf("\n");
return;
}
//头删法
void deleteFront_Linklist(Linklist* head)
{
if(NULL == head->next)
{
printf("链表为空,头删失败");
return ;
}
Linklist* temp = head->next;
head->next = temp ->next;
datatype num = temp->msg.data;
free(temp);
temp = NULL;
head->msg.len--;
return;
}
//尾删法
void deleteBehind_Linklist(Linklist* head)
{
if(NULL == head->next)
{
printf("链表为空,头删失败");
return;
}
Linklist* p = head;
while(p->next->next != NULL)
{
p = p->next;
}
Linklist* temp = p->next;
p->next = p->next->next;
datatype num = temp->msg.data;
free(temp);
temp = NULL;
head->msg.len--;
return;
}
//按位置插入
void insertWei_Linklist(Linklist* head, int n, datatype num)
{
Linklist* temp = (Linklist*)malloc(sizeof(Linklist));
if(n <= 0 || n > head->msg.len+1)
{
printf("位置不合法");
return;
}
temp->msg.data=num;
Linklist* p = head;
for(int i = 0;i<n-1;i++);
{
p = p->next;
}
temp->next = p->next;
p->next = temp;
head->msg.len++;
return;
}
//按位置删除
void deleteWei_Linklist(Linklist* head, int n)
{
if(n <= 0 || n > head->msg.len+1)
{
printf("位置不合法");
return;
}
Linklist* p = head;
for(int i=0;i<n-1;i++)
{
p = p->next;
}
Linklist* temp = p->next;
p->next = temp->next;
free(temp);
temp = NULL;
head->msg.len--;
return;
}
01main.c
#include<stdio.h>
#include"linklist.h"
int main(int argc, const char *argv[])
{
Linklist* head = creat_linklist();
insertFront_linklist(head, 100);
insertFront_linklist(head, 200);
insertFront_linklist(head, 300);
Bianli_linklist(head);
insertBehind_linklist(head, 500);
insertBehind_linklist(head, 600);
Bianli_linklist(head);
deleteFront_Linklist(head);
Bianli_linklist(head);
deleteBehind_Linklist(head);
Bianli_linklist(head);
insertWei_Linklist(head,2,300);
Bianli_linklist(head);
deleteWei_Linklist(head,3);
Bianli_linklist(head);
return 0;
}