我是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);
答案 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
),则更容易查看是否有指针。