第一个文件.h
#ifndef _LINKLIST_H
#define _LINKLIST_H
typedef int linklist_data_t;
typedef struct linklist{
linklist_data_t data;
struct linklist* next;
}lkl_node, *lkl_pnode;
//创建头节点
lkl_pnode create_linklist();
//插入
int insert_linklist(lkl_pnode H, int pos, linklist_data_t data);
//打印
int show_linklist(lkl_pnode H);
#endif
第二个文件 .c
#include "linklist.h"
#include <stdlib.h>
#include <stdio.h>
//创建头节点
lkl_pnode create_linklist()
{
//创建堆区空间
lkl_pnode H = (lkl_pnode)malloc(sizeof(lkl_node));
if(NULL == H)
{
printf("malloc is default\n");
return NULL;
}
H->next = NULL; //一开始是没有其他节点的,所以头节点指向NULL
return H;
}
//获取链表长度
int getlen_linklist(lkl_pnode H)
{
int count = 0;
while(H->next)
{
H = H->next;
count++;
}
return count;
}
//插入
int insert_linklist(lkl_pnode H, int pos, linklist_data_t data)
{
//判断插入位置是否合法
if(pos < 0 || pos > getlen_linklist(H))
{
printf("pos is default\n");
return -1;
}
//找到插入位置的前一个节点的位置
while(pos--)
{
H = H->next;
}
//插入,头插
lkl_pnode new = create_linklist();
new->data = data;
new->next = H->next;
H->next = new;
return 0;
}
//判空
int empty_linklist(lkl_pnode H)
{
if(H->next == NULL)
return 0;
else
return -1;
}
//打印
int show_linklist(lkl_pnode H)
{
if(0 == empty_linklist(H))
{
printf("H is empty\n");
return -1;
}
//遍历
while(H->next)
{
H = H->next;
printf("dat=%d ", H->data);
}
printf("\n");
}
测试文件.c
#include "linklist.h"
#include <stdio.h>
int main()
{
lkl_pnode H = create_linklist();
puts("-------------------insert 0-4--------------");
int i;
for(i = 0; i < 5; i++)
{
insert_linklist(H, 0,i);
}
show_linklist(H);
}