显示单链表

时间:2013-02-11 21:09:46

标签: c

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

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

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

1 个答案:

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