如何使我的链表中的最后一个元素在C中指向null

时间:2016-09-28 09:57:53

标签: c linked-list

我正在尝试在C中实现链接列表。在我的链接列表中,我想将元素插入到列表的开头,所以我有以下方法...

void insertToStart(LinkedList* list, Student st)
{
  LinkedListNode* newNode = (LinkedListNode*)malloc(sizeof(LinkedListNode)); 
  newNode->data = st;
  newNode->next = list->head;
  list->head = newNode;
}

当我尝试打印我的列表时出现问题...我得到一个无限循环。这是我的printList方法

void printList(LinkedList* list)
{
  LinkedListNode* current;
  current = list->head;
  while(current != NULL)
  {
    printf("Name: %s ID: %d\n", current->data.name , current->data.ID);
    current = current->next;
  }
}

如果想到这可能是因为我列表中的最后一个元素未指向null但我不知道如何使最后一个元素的下一个指向null。我怎样才能做到这一点? 这是我的头文件......

#ifndef LINKEDLIST_H
#define LINKEDLIST_H

typedef struct{
  char name[20];
  int ID;
} Student;

typedef struct LinkedListNode{
  Student data;
  struct LinkedListNode* next;
} LinkedListNode;

typedef struct {
  LinkedListNode* head;
} LinkedList;

void mallocList(LinkedList* list);
void insertToStart(LinkedList* list, Student st);
void printList(LinkedList* list);

#endif

2 个答案:

答案 0 :(得分:0)

NULL == 0.因此,将next ptr设置为0.表示链接列表的终止。

next = 0;

答案 1 :(得分:0)

您应该将list->head初始化为NULL。 然后,当您使用insertToStart向列表顶部添加元素时,列表中的最后一个元素将使其next等于NULL,因此您的尾部会有正确的尾部名单。 如果您还想从列表中删除节点,则还必须小心。在这种情况下,请确保在删除尾节点时,其前一节点的next指针设置为NULL