#include <stdio.h>
#include <stdlib.h>
#include "./02_linklist.h"
Linklist* create_linklist(void)
{
Linklist* head = (Linklist*)malloc(sizeof(Linklist));
if(NULL == head)
{
printf("失败");
return NULL;
}
head->msg.len = 0;
head->next = NULL;
return head;
}
/*
* function: 从头插
* @param [ in]
* @param [out]
* @return
*/
void insert_linkFront(Linklist* head, datatype data)
{
Linklist* temp = (Linklist*)malloc(sizeof(Linklist));
if(NULL == temp)
{
printf("创建失败,插入数据失败\n");
return;
}
//初始化该结点
temp->next = NULL;
temp->msg.data = data;
temp->next = head->next;
head->next = temp;
head->msg.len++;
return;
}
/*
* function: 尾插
* @param [ in]
* @param [out]
* @return
*/
void tial_linklist(Linklist* head, datatype num)
{
Linklist* temp = (Linklist*)malloc(sizeof(Linklist));
Linklist* p = head->next;
while(p->next!=NULL)
{
p=p->next;
}
p->next=temp;
temp->next= NULL;
temp->msg.data=num;
head->msg.len++;
}
/*
* function: 遍历
* @param [ in]
* @param [out]
* @return
*/
void show_linklist(Linklist* head)
{
if(NULL == head)
{
printf("链表错误\n");
return ;
}
Linklist* p = head->next;
while(p != NULL)
{
printf("%d ", p->msg.data);
p= p->next;
}
putchar(10);
return ;
}
/*
* function: 从头部删除
* @param [ in]
* @param [out]
* @return
*/
void delete_linkFront(Linklist* head)
{
if(NULL == head->next || NULL == head)
{
printf("链表为空,或传参非法,删除失败\n");
}
Linklist* temp = head->next;
head->next = head->next->next;
head->msg.len--;
datatype data = temp->msg.data;
free(temp);
}
/*
* function: 从尾部删除
* @param [ in]
* @param [out]
* @return
*/
datatype del_linklist_tail(Linklist* head)
{
if(NULL == head->next || NULL == head)
printf("删不了\n");
Linklist* p = head->next;
while(p->next!= head->next->next)
linklist.c
![](https://img-blog.csdnimg.cn/direct/d0578074844645fabd64b7d5ef69177b.png)
* function: 按位置插入
* @param [ in]
* @param [out]
* @return
*/
int insert_linkByPos(Linklist* head, int pos, datatype data)
{
if(pos < 1 || pos>head->msg.len+1)
{
printf("pos=%d 插入位置不合法\n", pos);
return -1;
}
if(NULL == head)
{
printf("头结点为空,链表传参为非法\n");
return -1;
}
Linklist* temp = (Linklist*)malloc(sizeof(Linklist));
if(NULL == temp)
{
printf("创建结点失败\n");
return -1;
}
temp->msg.data = data;
temp->next = NULL;
Linklist* p = head;
for(int i=0; i<pos-1; i++)
{
p = p->next;
}
temp->next = p->next;
p->next = temp;
head->msg.len++;
return 0;
}
*
* function: 按位置删除
* @param [ in]
* @param [out]
* @return
*/
datatype delete_linkByPos(Linklist* head, int pos)
{
if(pos<=0 || pos>head->msg.len)
{
printf("pos=%d 删除位置不合法\n", pos);
return -1;
}
if(NULL == head)
{
printf("头结点为空,链表传参为非法\n");
return -1;
}
Linklist* p = head;
for(int i=0; i<pos-1; i++)
{
p = p->next;
}
Linklist* temp = p->next;
datatype data = temp->msg.data;
p->next = temp->next;
free(temp);
temp = NULL;
head->msg.len--;
return data;
}
![](https://img-blog.csdnimg.cn/direct/1ec705165bae46e48d13af4f5feaa75d.png)
![](https://img-blog.csdnimg.cn/direct/a7c4c6d02ea2417a9c256e441c092f43.png)