c - 插入链表无法正常工作

标签 c

我想为我的链接列表添加一个插入方法,该方法将插入到链接列表中已有的内容(附加值)。

现在这是我的代码:

struct node {
   char value;
   struct node *next;
};

typedef struct node item;

void main() {
    InsertChar('a');
    InsertChar('b');
    InsertChar('c');
}

void InsertChar(char s) {
    item *curr, *head;

    head = NULL;

    curr = (item *)malloc(sizeof(item));
    curr->value = s;
    curr->next = head;
    head = curr;

    while(curr) {
        printf("%c", curr->value);
        curr = curr->next;
    }

    printf("\n");
}

问题是在控制台中打印

a 
b
c

我需要它来打印类似的东西

a
ab
abc

在 main() 中调用 3 个 InsertChar 方法后。

我该怎么做?

最佳答案

你的问题是 head 是在函数中本地声明的,当你离开函数时,你就失去了它。当您再次访问该函数时,您将从头开始创建它,等等。

因此您需要将 head 作为参数传递给 InsertChar 函数。

此外,如果您想查看 a、ab、abc 输出,您需要将元素添加到列表的尾部,而不是像现在一样添加到头部。为了实现这一点,您要么需要为 tail 存储一个单独的指针,要么每次遍历到最后一个元素。

关于c - 插入链表无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19779743/

相关文章:

c - 如何在 Asterisk 中将 PostgreSQL 数据库时间戳更新为空?

无法写入命名管道

c - C 中的数据结构

c - C中数组列表到链表节点

c - 使用 getchar() 而不是 scanf() 的问题

在函数内调用数组

c - 在用 C 编写 GUI 应用程序时需要帮助

objective-c - 给定进程 ID,确定进程是否是 Mac 上的窗口进程

c - 如何加速以下代码以显着计算 CPU 上的 LBP?

在不按 Enter C 的情况下捕获 EOF 击键