欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

循环链表操作(链表带头节点)

程序员文章站 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个节点前
相关标签: 算法与数据结构