我刚刚开始学习链表,我正在尝试制作链表。
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int value;
struct ListNode *next;
} ListNode;
问题是我在列表的开头插入了一个函数,但是当我尝试用显示函数显示所有内容时,它进入一个无限循环,显示我插入列表的最后一个数字。
void insertBEG(ListNode **list, int elem) {
ListNode *node = (ListNode *)malloc(sizeof(ListNode));
node->value = elem;
node->next = NULL; // create a new node
if((*list) == NULL){
(*list) = node;
node->next = NULL;
return;
}
node->next = (*list);
(*list) = node;
}
void display(ListNode **list) {
ListNode *current = (*list);
if(current == NULL) return;
while( current != NULL) {
printf("The element in the list is: %d\n", current->value);
}
}
int main () {
ListNode *head = NULL;
int i;
for(i = 0; i < 20; i++) {
insertBEG(&head, i);
}
display(&head);
return 0;
}
输出:
The element in the list is: 19
The element in the list is: 19
x infinte times
我真的不明白为什么会这样。如果有人可以提供帮助,我将非常感激。
答案 0 :(得分:3)
您的display
仅打印头部,您错过了循环中的current = current->next
void display(ListNode **list) {
ListNode *current = (*list);
if(current == NULL) return;
while( current != NULL) {
printf("The element in the list is: %d\n", current->value);
current = current->next; // <-- you missed that
}
}
所以函数永远停留在while
循环中。