#include "link.h"
/*单向循环链表*/
/***************************
@brief:初始化(创建头结点)
@para:无
@retval:结构体指针
***************************/
link_t *link_init(void)
{
/*在堆中申请空间*/
link_t *p = (link_t *)malloc(sizeof(link_t));
if(p == NULL)
{
perror("malloc error");
return NULL;
}
//修改处
/*将next赋值为p*/
p->next = p;
return p;
}
/***************************
@brief:创建一个新的节点
@para:数据域的数据
@retval:结构体指针
***************************/
static link_t *create_node(datatype d)
{
/*在堆中申请空间*/
link_t *p = (link_t *)malloc(sizeof(link_t));
if(p == NULL)
{
perror("malloc error");
return NULL;
}
/*将next赋值为自己*/
p->data = d;
//修改处
p->next = p;
return p;
}
/***************************
@brief:插入的功能函数,一个节点node插在另一个节点p的后面
@para:数据域的数据
@retval:结构体指针
***************************/
static void insert_behind(link_t *p,link_t *node)
{
/*遵循大原则:先连后断*/
node->next = p->next;
p->next = node;
}
/***************************
@brief:剪切的功能函数,剪切p后面的那个节点
@para:数据域的数据
@retval:结构体指针
***************************/
static link_t *cut_behind(link_t *p)
{
//修改处
/*保存需要剪切的节点*/
link_t *node = p->next;
/*将p的next指向node的next*/
p->next = node->next;
/*为了安全,让node的next指向自己*/
//修改处
node->next = node;
return node;
}
void display(link_t *p)
{
//修改处
link_t *head = p;
printf("遍历结果为:\n");
while(p->next != head)
{
p = p->next;
printf("%d ->",p->data);
}
printf("\n");
}
/*单向循环链表*/
/***************************
@brief:初始化(创建头结点)
@para:无
@retval:结构体指针
***************************/
link_t *link_init(void)
{
/*在堆中申请空间*/
link_t *p = (link_t *)malloc(sizeof(link_t));
if(p == NULL)
{
perror("malloc error");
return NULL;
}
//修改处
/*将next赋值为p*/
p->next = p;
return p;
}
/***************************
@brief:创建一个新的节点
@para:数据域的数据
@retval:结构体指针
***************************/
static link_t *create_node(datatype d)
{
/*在堆中申请空间*/
link_t *p = (link_t *)malloc(sizeof(link_t));
if(p == NULL)
{
perror("malloc error");
return NULL;
}
/*将next赋值为自己*/
p->data = d;
//修改处
p->next = p;
return p;
}
/***************************
@brief:插入的功能函数,一个节点node插在另一个节点p的后面
@para:数据域的数据
@retval:结构体指针
***************************/
static void insert_behind(link_t *p,link_t *node)
{
/*遵循大原则:先连后断*/
node->next = p->next;
p->next = node;
}
/***************************
@brief:剪切的功能函数,剪切p后面的那个节点
@para:数据域的数据
@retval:结构体指针
***************************/
static link_t *cut_behind(link_t *p)
{
//修改处
/*保存需要剪切的节点*/
link_t *node = p->next;
/*将p的next指向node的next*/
p->next = node->next;
/*为了安全,让node的next指向自己*/
//修改处
node->next = node;
return node;
}
void display(link_t *p)
{
//修改处
link_t *head = p;
printf("遍历结果为:\n");
while(p->next != head)
{
p = p->next;
printf("%d ->",p->data);
}
printf("\n");
}