我正在尝试在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
答案 0 :(得分:0)
NULL == 0.因此,将next
ptr设置为0.表示链接列表的终止。
即
next = 0;
答案 1 :(得分:0)
您应该将list->head
初始化为NULL
。
然后,当您使用insertToStart
向列表顶部添加元素时,列表中的最后一个元素将使其next
等于NULL
,因此您的尾部会有正确的尾部名单。
如果您还想从列表中删除节点,则还必须小心。在这种情况下,请确保在删除尾节点时,其前一节点的next
指针设置为NULL
。