链表 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