C 中的简单 link 列表程序

Simple link list program in C

Link List 在 C 中实现的简单代码。 这是正确的写作方式还是我遗漏了什么?免费区可以吗?

typedef struct box{// data type definition 
        int data;
        struct box* next;
    } node; // "node"

node* node1 = (node *)malloc( sizeof(node));// heap memory allocation for node1
    if(node1 != NULL){ // ( safety check)
        node1->data = 1;//assign value
        node1->next = NULL;// doesn't point to anyone
    }

node* node2 =(node*)malloc(sizeof(node));// node 2 work
    if(node2 != NULL) {
        node2 ->data = 2;
        node2->next = NULL;
    }

node1->next = node2;//first connection
node2->next = NULL;//second connection

for(node *tmp =node1; tmp !=NULL; tmp=tmp->next){// printing value in nodes using *tmp pointer
        printf("%i\n",tmp->data );
    }

free(node1);//delete node1 allocation on heap
free(node2);//delete node 2 allocation on heap

在此声明中

struct box{// data type definition 
    int data;
    struct box* next;
} node; // "node"

您声明了 struct box 类型的变量 node,该变量未被进一步使用。

你的意思似乎是像

这样的 typedef 声明
typedef struct box{// data type definition 
    int data;
    struct box* next;
} node; // "node"

因此这些陈述

node* node1 = (node *)malloc( sizeof(node));
node* node2 =(node*)malloc(sizeof(node));

会产生编译错误。

如果您的列表应该包含例如 100 个节点,您会声明 100 个变量 node1 ,..., node100 吗?

您需要编写一个单独的函数来在列表中包含新节点。

这些陈述

node1->next = node2;//first connection
node2->next = NULL;//second connection

如果任一指​​针等于 NULL,则可以调用未定义的行为。