扫描输入到链表

时间:2017-03-15 06:27:34

标签: c linked-list

我是编程的新手。我写了一个函数来扫描链接列表的输入。但它不起作用。任何人都可以帮我找到问题所在吗?

ListNode *BuildList() {
    char discard;
    ListNode *list,*list2=NULL;
    list = (ListNode*)malloc(sizeof(struct ListNode));
    if ((scanf("%d%1[^\n]s", &list->val, &discard)) == 2) {
        list->next = BuildList();
        printf("%d ", list->next->val);
    }
    else
    {
        list->next = NULL;
    }
    return list;
}

和ListNode定义为

struct ListNode {
    int val;
    ListNode *next;
};

谢谢!

1 个答案:

答案 0 :(得分:0)

我不得不接受您的代码并尝试重现您遇到的错误。 您的代码看起来很好,除了它提供编译时错误,因为它无法推断ListNode的类型。 典型的错误是我认为你是:

test.c:11:5: error: unknown type name ‘ListNode’
     ListNode *list,*list2=NULL;

有两种解决方案:

一个,修改结构定义如下。通过这种方法,您的代码就像一个魅力。

typedef struct ListNode {
  int val;
  struct ListNode *next;
} ListNode;

两个,保留结构的定义,但在每个带有关键字struct的结构变量声明之前。例如;代替ListNode *list,*list2=NULL;执行struct ListNode *list,*list2=NULL;

我尝试运行您的代码,示例输入和生成的输出如下。我希望这是你期望你的功能表现的方式。

1 2 3 4 5 6 7 8 9 // <- input
9 8 7 6 5 4 3 2 // <- output