在 C 中使用简单的链表时遇到问题



我正在尝试理解链表。我创建了这段代码,它应该给我链表的经验。当我运行这段代码时,我得到 0,尽管输出应该是 10,9,8,7,6,5,4,3,2,1,0。有人可以帮我解决这个问题吗?

#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
    int value;
    struct node *next;
}node;
node * addnode (node *ptr, int value);
void traverse(node *ptr);
int main (void)
{
    int i;
    node *ptr,*root;
    root=(node *)malloc(sizeof(node));
    ptr=root;
    root->value=0;
    root->next=0;
    for(i=1;i>10;i++)
        ptr=addnode(ptr,i);
    traverse(ptr);
    return(0);
}
void traverse(node *ptr)
{
    printf("%dn",ptr->value);
    if(ptr->next) /*assuming that the pointer to the next node is initialized to NULL, so if its NULL then the if codeblock won't execute*/
        traverse(ptr->next);
}
node * addnode (node *ptr, int value)
{
    node *newnode;
    newnode=(node *)malloc(sizeof(node));
    newnode->value=value;
    newnode->next=ptr;
    return(newnode);
}

你的代码有两个问题:

  1. 理想情况下,您会执行traverse(root)而不是traverse(ptr)
  2. 您将节点添加到链表的开头,此时您应该将它们添加到列表的末尾。

你可以这样做(来源):

void Push(struct node** headRef, int newData) {
    struct node* new_node =
        (struct node*) malloc(sizeof(struct node));
    new_node->data = newData;
    new_node->next = *headRef;
    *headRef = new_node;
}

在您的情况下,它看起来像:

void addnode(struct node** headRef, int newData) {
    struct node* new_node =
        (struct node*) malloc(sizeof(struct node));
    new_node->value = newData;
    new_node->next = *headRef;
    *headRef = new_node;
}

然后添加如下节点:addnode(&root, some_value);

相关内容

  • 没有找到相关文章

最新更新