0

我已经很长时间没有使用链表了,我不知道为什么这段代码会失败。我正在尝试创建一个非常简单的循环链表,其中正好有 5 个节点。我永远不需要插入额外的节点,也不需要删除现有的节点。

我得到一个'node' has no member named 'next'错误。谁能告诉我我做错了什么?谢谢。

typedef struct {
    char payload[1024];
    int x;
    node* next;
} node;

node* root_ptr;
node this_node; 

root_ptr = malloc(sizeof(node *));
root_ptr = &this_node; //keep a pointer to the root
int i;
for (i=0; i<5; i++) {
    node next_node;
    this_node.next = &next_node;
    this_node = next_node;
}
this_node.next = root_ptr;
4

3 回答 3

3

在您的结构成员内部,typedef名称仍然未知。所以,应该给你的结构一个名字,然后你可以用它声明一个标识符:

它将起作用:

typedef struct node_t {
    char payload[1024];
    int x;
    struct node_t* next;
} node;
于 2013-09-21T02:50:13.197 回答
2

首先,root_ptr = malloc(sizeof(node *));是多余的。

第二个定义了一个局部变量,它将在循环node next_node;后超出范围。for您需要为 next_node 动态分配内存。

第三,您有 6 个节点,包括根,而不是 5 个。

于 2013-09-21T02:46:12.260 回答
0

try this:

int main(){

    // create root and helper nodes
    node * root_ptr;
    node * this_node = (node *)malloc(sizeof(node)); 

    this_node->x = 0;

    root_ptr = this_node; //keep a pointer to the root
    int i;
    // create list
    for (i=1; i<5; i++) {
        node * next_node = malloc(sizeof(node));
        next_node->x = i;
        this_node->next = next_node;
        this_node = next_node;
    }
    // complete cycle
    this_node->next = root_ptr;

    this_node = root_ptr;
    // check
    for (i=0; i<5; i++){
        printf("%d\n", this_node->x);
        this_node=this_node->next;
    }
    return 0;
}

note that it's a generally bad idea to assign stack memory in a link list

于 2013-09-21T03:05:07.607 回答