链接列表C - 当没有存在时创建头

时间:2018-04-06 12:47:09

标签: c pointers singly-linked-list

我正在尝试在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。

有人可以向我解释一下吗? 我感谢任何帮助。 在此先感谢:)

1 个答案:

答案 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