首页 > 解决方案 > 如何制作高效的循环链表?

问题描述

我正在研究循环链表。下面是我的代码。

typedef struct circle {

    int data;
    struct circle* next;
} Node;

typedef struct circle {

    int number;
    Node *Header;
} Circular_List;

void add(Circular_List* circle, int number, int data) {

    if (number <0 && number > circle->number)
    {
        printf("number is wrong. \n");
    }
    else
    {


        if (number == 0 && circle->number != 0)
        {

            Node* pre = (Node*)malloc(sizeof(Node));
            Node* add_data = (Node*)malloc(sizeof(Node));
            Node* tempt = (Node*)malloc(sizeof(Node));
            pre = circle->Header;


            while (pre->next != circle->Header )
            {
                pre = pre->next;
            }

            circle->number++;
            tempt = circle->Header;
            circle->Header = add_data;
            pre->next = add_data;
            add_data->next = tempt;
            add_data->data = data;
        }
        else if (number == 0 && circle->number == 0)
        {
            Node* add_data = (Node*)malloc(sizeof(Node));
            circle->Header = add_data;
            add_data->data = data;
            add_data->next = add_data;
            circle->number++;
        }
        else
        {

            Node* pre = (Node*)malloc(sizeof(Node));
            Node* add_data = (Node*)malloc(sizeof(Node));
            pre = circle->Header;
            for (int i = 0; i < number; i++)
            {
                pre = pre->next;
            }
            add_data->data = data;
            add_data->next = pre->next;
            pre->next = add_data;
            circle->number++;
        }

    }
}

它运行良好。但我认为我的代码效率不高。

因为当我只添加一个新节点时,我分配了 3 个节点内存并且不释放任何一个。

这似乎是浪费内存。

如何调整我的代码?或者

制作循环链表是正确的方法吗?

标签: ccircular-list

解决方案


推荐阅读