注意结束的判断条件是尾指针指向头,直接上代码,简单明了
基本操作的函数都已给出,自己可以写个主函数进行测试。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//节点类型
typedef struct circular_list_node
{
int data;
struct circular_list_node *next;
struct circular_list_node *pre;
} DuCircularList;
//双向循环链表初始化
DuCircularList *InitList(DuCircularList *L)
{
L = (DuCircularList *)malloc(sizeof(DuCircularList));
if (!L)
{
exit(-1);
}
memset(L, 0, sizeof(DuCircularList));
L->next = L;
L->pre = L;
return L;
}
//尾插法插建立双向循环链表
DuCircularList *TailInsertNodeToList(int count)
{
DuCircularList *p;
DuCircularList *r;
DuCircularList *L;
int i;
int data;
L = InitList(L); //初始化循环链表
r = L; //标记头指针
for (i = 0; i < count; i++)
{
scanf("%d", &data);
p = (DuCircularList *)malloc(sizeof(DuCircularList)); //创建节点
if (p == NULL)
{
printf("malloc fail\n");
exit(-1);