链接列表未显示

时间:2019-02-22 14:55:48

标签: c

我是C语言的新手,刚开始学习Linked List。我认为我的add函数可以正常工作,但似乎没有显示我的链表。我没有收到任何错误或警告,并且没有崩溃。

struct node { int data; struct node *next; }; typedef struct node *User; User newUser() { User newNode; newNode = (User)malloc(sizeof(struct node)); newNode->next = NULL; return newNode; } void add(User head, int x) { User temp, p; temp = newUser(); temp->data = x if(head == NULL) { head = temp; } else { p = head; while(p != NULL) { p = p->next; } p->next = head; } } void displayData(User head) { User temp; temp = head; while(head != NULL) { printf("%d ",temp->data); temp = temp->next; } }

编辑:我如何调用函数

用户头= NULL

add(head,10);

displayData(head);

1 个答案:

答案 0 :(得分:0)

您没有显示如何调用add,但是即使如此,也很容易看出为什么它不起作用。

在函数调用中使用变量时,例如

User mylist;

add(mylist, 10);

mylist的值保持不变,因为您只是将其值传递给add

某些语言具有通过引用传递的能力,但是C没有。但是,您可以将指针传递给变量。

add(&mylist, 10);

然后add变成...

void add(User *head, int x)
{
    User temp, p;

    temp = newUser();
    temp->data = x
    if(*head == NULL)
    {
        *head = temp;
    // etc...

以及之前使用head的位置,请取消引用它,以便使用mylist的值,如果更改*head的值,则要更改值mylist

您的typedef中的User使得代码很难阅读,因为它掩盖了实际上是指向struct node的指针的事实-您应该将其设为{{ 1}}(共typedef),则更容易查看是否有指针。