0

我正在尝试创建一个单链表。我创建了五个节点并用整数值初始化它们。但是当我打印链接列表时,我什么也得不到。

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);
    }
}

我想我没有正确设置指针。

4

1 回答 1

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!)

于 2013-02-11T21:13:50.690 回答