我试图在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->head
为NULL
。然后,当您使用insertToStart
向列表的头部添加元素时,列表中的最后一个元素将保持其next
等于NULL
,因此您将在列表中获得正确的尾部。如果还想实现从列表中删除节点,也必须非常小心。在本例中,请确保在删除尾部节点时,它的前一个节点将其next
指针设置为NULL
。
NULL == 0。所以将next
ptr设置为0。表示链表的终止。
next = 0;