0

単一リンクリストを作成しようとしています。5つのノードを作成し、整数値で初期化しました。しかし、リンクリストを印刷しても何も得られません。

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

ノードを4回割り当てます。更新しないため、常に同じ要素が上書きされます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 に答える