循环链表操作(链表带头节点)
程序员文章站
2024-03-21 14:32:04
...
#ifndef CIRCULARLIST_H
#define CIRCULARLIST_H
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
typedef int ElemType;
// 循环链表节点
typedef struct CircularNode{
ElemType data;
struct CircularNode *next;
}*CircularList;
// 返回一个动态分配的新节点,该节点尾部指向头部(头结点不用于存放数据)
CircularList NewCircularListNode()
{
CircularList list = (CircularList)malloc(sizeof(struct CircularNode));
if (!list)
return NULL;
memset(list, 0, sizeof(struct CircularNode));
list->next = list;
return list;
}
void CircularListInfo(CircularList list)
{
CircularList pos = list; // 头结点
// 先遍历元素,再打印其值
printf("listhead=%p: ",list);
if (list->next == list) { // 只有头结点,没有有效数据
printf("list is null\n");
return;
}
pos = pos->next; // 第一个节点开始
while(pos != list){
printf("%d, ",pos->data);
pos = pos->next;
}
printf("\n");
}
// 在第i个节点前
上一篇: 单向链表的反转
下一篇: centos7安装telnet服务