C 链表节点创建

C 链表节点创建,c,linked-list,C,Linked List,根节点永远不会返回给调用方。您需要接受根节点的节点作为指针,因此节点**能够在其原始位置分配根,或者返回新分配的当前节点 然后, 给出了更新代码;以上内容仍然适用,但您主要的演示示例需要修改。节点**选项会更好 推送功能有两个问题;接受节点**,并在创建时设置根节点;以及在已经创建根时正确插入新节点 node_t * push (node_t *root, int value) { node_t* current = root; /*...*/ return curren

根节点永远不会返回给调用方。您需要接受根节点的节点作为指针,因此节点**能够在其原始位置分配根,或者返回新分配的当前节点

然后,

给出了更新代码;以上内容仍然适用,但您主要的演示示例需要修改。节点**选项会更好

推送功能有两个问题;接受节点**,并在创建时设置根节点;以及在已经创建根时正确插入新节点

node_t * push (node_t *root, int value) {
    node_t* current = root;
    /*...*/
    return current;
}
全面上市

// accept the root as node_t**
void push (node_t **root, int value) {
    node_t* current = *root; // get the root node

    if (current == NULL) {
        current = (node_t*)malloc(sizeof(node_t));
        current->value = value;
        current->next = NULL;
        *root = current; // set the root node
    }
    else {
        while (current->next != NULL) {
            current = current->next;
        }

        // create the new node in the place of the "next" node
        current->next = (node_t*)malloc(sizeof(node_t));
        current->next->value = value;
        current->next->next = NULL;
    }
}

注;这是使用-std=c11语言级兼容性编译的。

Debugger………..请阅读。告诉我们什么不起作用。你能将你的结构定义添加到你的代码中吗?或者最好将根作为一个节点\u t*根作为一个全局变量。双指针有时会让我大吃一惊,谢谢
void push (node_t *root, int value)
node_t * push (node_t *root, int value)
node_t * push (node_t *root, int value) {
    node_t* current = root;
    /*...*/
    return current;
}
// accept the root as node_t**
void push (node_t **root, int value) {
    node_t* current = *root; // get the root node

    if (current == NULL) {
        current = (node_t*)malloc(sizeof(node_t));
        current->value = value;
        current->next = NULL;
        *root = current; // set the root node
    }
    else {
        while (current->next != NULL) {
            current = current->next;
        }

        // create the new node in the place of the "next" node
        current->next = (node_t*)malloc(sizeof(node_t));
        current->next->value = value;
        current->next->next = NULL;
    }
}
#include <stdio.h>
#include <stdlib.h>

typedef struct node {
    int value;
    struct node* next;
} node_t;

void push (node_t **root, int value) {
    node_t* current = *root;

    if (current == NULL) {
        current = (node_t*)malloc(sizeof(node_t));
        current->value = value;
        current->next = NULL;
        *root = current;
    }
    else {
        while (current->next != NULL) {
            current = current->next;
        }

        current->next = (node_t*)malloc(sizeof(node_t));
        current->next->value = value;
        current->next->next = NULL;
    }
}

void print (node_t* root) {
    node_t* current = root;
    while(current != NULL) {
        printf("%d ", current->value);
        current = current->next;
    }   
}

int main(void) {
    node_t* root = NULL;
    push(&root, 5); // note the additional &
    push(&root, 10);
    push(&root, 15);
    print(root);

    return 0;
}