链表 C - 当 none 存在时创建一个 Head
Linked List C - create a Head when none is existing
我正在尝试用 C 语言实现一个单向链表,但在创建头节点时遇到了问题。
我的代码如下所示:
#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。
有人能给我解释一下吗?
我感谢任何帮助。
提前致谢:)
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
应该总是指向链表的 "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
我正在尝试用 C 语言实现一个单向链表,但在创建头节点时遇到了问题。
我的代码如下所示:
#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。
有人能给我解释一下吗? 我感谢任何帮助。 提前致谢:)
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
应该总是指向链表的 "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