如何在(C)中打印链表上的所有节点

Tar*_*had -1 c linked-list

我的链表只打印最后一个节点.我怎样才能解决我的问题;

我有一个函数将样本数据填充到链表中,然后打印所有节点.但我的代码只打印此图像:  代码输出是

我的功能是:

void FillSamples()
{
    db = (database *)malloc(sizeof(database));
    db->name = "College";

    tables=NULL;

    char na[5];
    int i = 0;
    for (i = 1; i <= 20; i++) {

        temptable = (table *)malloc(sizeof(table));

        itoa(i, na, 10);

        temptable->name = na;
        temptable->next = tables;

        tables = temptable;
    }

    // create links
    db->tables = tables;

    // print sample
    printf("database name = %s \n", db->name);
    temptable=tables;

    while (temptable)
    {
        printf("tables name = %s \n", temptable->name); 
        temptable=temptable->next;
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 5

您创建节点的代码会na在列表结构中保存指针:

temptable->name = na;
Run Code Online (Sandbox Code Playgroud)

但是你会立即na用下一个值覆盖,直到最后一个值.因此,当您尝试打印时,所有节点都指向当前值na,这是最后一个.

您必须以不同方式存储名称.

  • 一种选择是使用char name[32];而不是char *name;在结构中,并strcpy(temptable->name, na);设置值.

  • 另一种选择是用来strdup()复制字符串:temptable->name = strdup(na);.请注意,如果您使用strdup(),则还必须使用free()以稍后释放该字符串.