c - 不显示链表中节点追加的结果

标签 c linked-list

我已经编写了一段代码来附加节点(无论是否为空)。 我认为我的代码和逻辑是正确的,但我仍然无法得到任何答案。它编译但运行后没有显示任何结果。请告诉我原因

#include<stdio.h>
#include<stdlib.h>

struct node 
{
    int data;
    struct node *nxt;
};

void append(struct node *,int);
void display(struct node*);

void append( struct node *q, int num )
{
    struct node *temp,*r;
    if(q == NULL)
    {
        temp = (struct node*)malloc(sizeof(struct node));
        temp -> data = num;
        temp -> nxt = NULL;
        q = temp;
    }
    else
    {
        temp = q;
        while(temp->nxt != NULL)
        {
            temp = temp->nxt;
        }
        r = (struct node*)malloc(sizeof(struct node));
        r -> data = num;
        r -> nxt = NULL;
        temp->nxt = r;
    }
}

void display(struct node *q)
{
    while(q != NULL)
    {
        printf("%d",q->data);
        q = q->nxt;
    }
}


int main()
{
    struct node *a;
    a= NULL;
    append(a,10);
    append(a,11);
    append(a,12);
    display(a);
    return 0;
}

最佳答案

需要将第一个参数(列表头)的地址通过地址传递给append方法。正如所写,它在第一次调用(以及每个后续调用)中传递 NULL,因为它是按值传递。

原型(prototype)应该看起来像这样:

void append( struct node **q, int num )

然后像这样进行调用:

append(&a,10);

请注意,函数 append 需要进行相应更新,才能正确处理参数更改。

关于c - 不显示链表中节点追加的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10962485/

相关文章:

c++ - 在模板链表中使用友元函数时出现链接错误

c++ - "stdio"和 "stdlib"在 C 中代表什么?

C程序反向链表

C 两链表查找

c - c中的反向字符串

c - 我正在尝试编写一个通过引用反转链表的函数

c - 如何修复此调整大小功能?

c - 哪个更有效,循环或只是定期添加

c - 如何在 Linux 平台上编译和运行 ESQL/C 程序?

c - void * 算术