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



我试图在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: %dn", 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

应该初始化list->headNULL。然后,当您使用insertToStart向列表的头部添加元素时,列表中的最后一个元素将保持其next等于NULL,因此您将在列表中获得正确的尾部。如果还想实现从列表中删除节点,也必须非常小心。在本例中,请确保在删除尾部节点时,它的前一个节点将其next指针设置为NULL

NULL == 0。所以将next ptr设置为0。表示链表的终止。

next = 0;

相关内容

  • 没有找到相关文章

最新更新