我正在尝试创建一个单链表。我创建了五个节点并用整数值初始化它们。但是,当我打印链接列表时,我什么都没得到。
typedef struct node {
int value;
struct node* nextPtr;
} node;
node *nodePtr;
node *head;
void initializeLinkedList() {
static unsigned int i;
nodePtr = (node*)malloc(sizeof(node));
i = 0;
nodePtr->nextPtr = (node*)malloc(sizeof(node));
nodePtr->value = i;
head = nodePtr;
for (i = 1; i < 5; i++) {
nodePtr->nextPtr = (node*)malloc(sizeof(node));
nodePtr->value = i;
}
nodePtr->nextPtr = NULL;
}
void printLinkedList() {
static unsigned int i;
i = 0;
nodePtr = head;
while (nodePtr->nextPtr != NULL) {
printf("Value of ptr is %p \n", nodePtr->nextPtr);
printf("Value is %d \n", nodePtr->value);
}
}
我想我没有正确设置指针。
答案 0 :(得分:4)
此:
for (i = 1; i < 5; i++) {
nodePtr->nextPtr = malloc(sizeof(node));
nodePtr->value = i;
}
分配一个节点四次,然后它总是覆盖同一个元素,因为你没有更新nodePtr
。它应该是
for (i = 1; i < 5; i++) {
nodePtr->nextPtr = malloc(sizeof(node));
nodePtr->value = i;
nodePtr = nodePtr->nextPtr;
}
而不是(而不仅仅是在这种特殊情况下 - 在你的代码中到处寻找并修复它,否则你最终会得到所有那些或多或少有趣的未定义行为结果......)。
此外,在printLinkedList()
,
while(nodePtr->nextPtr != NULL)
应该是
while(nodePtr != NULL)
否则你将在最后一次迭代时取消引用NULL
(和BANG!)