我正在尝试在C中实现单链表,并且无法创建Head节点。
我的代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct NODE{
int value;
struct NODE* next;
}node;
int append(node* head, int val){
if(head == NULL){
printf("Head is NULL");
head = malloc(sizeof(node));
if(head == NULL){
return EXIT_FAILURE;
}
head->value = val;
head->next = NULL;
} else {
printf("Head is not NULL");
while(head->next != NULL){
head = head->next;
}
head = malloc(sizeof(node));
head->value = val;
head->next = NULL;
}
return EXIT_SUCCESS;
}
int main(){
node* head = NULL;
append(head, 10);
append(head, 5);
append(head, 7);
return EXIT_SUCCESS;
}
添加节点时,应分配头部的内存,然后填充参数(如果尚不存在)。我无法弄清楚,为什么Head始终保持NULL。
有人可以向我解释一下吗? 我感谢任何帮助。 在此先感谢:)
答案 0 :(得分:1)
head
始终为NULL
,因为您没有修改它,而是修改其复制的值。
在main()
中,执行以下操作:
append(&head, 10); // Modify head itself and not its copied value
将功能签名更改为:
int append(node** head, int val)
在函数append()
内,将head
替换为*head
到处
您的代码还有一个问题。在append()
中,不需要while
循环,因为您将永久地将head
转移到最后。您不应该这样做,因为head
应始终指向链接列表的“头部”。
#include <stdio.h>
#include <stdlib.h>
typedef struct NODE
{
int value;
struct NODE *next;
} node;
int
append (node **head, int val)
{
if (*head == NULL)
{
printf ("Head is NULL");
*head = malloc (sizeof (node));
if (*head == NULL)
{
return EXIT_FAILURE;
}
(*head)->value = val;
(*head)->next = NULL;
}
else
{
printf ("Head is not NULL");
node * temp = malloc (sizeof (node));
temp->value = val;
temp->next = *head;
*head = temp;
}
return EXIT_SUCCESS;
}
int
main ()
{
node *head = NULL;
append (&head, 10);
append (&head, 5);
append (&head, 7);
return EXIT_SUCCESS;
}
输出:
Head is NULLHead is not NULLHead is not NULL