2013-02-11 3 views
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); 
    } 
} 

Я думаю, что не правильно настроил указатели.

+1

[Не кастовал возвращаемое значение 'malloc()'] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc). Также, пожалуйста, используйте пробелы и отступы правильно. – 2013-02-11 21:11:44

+0

Вы правы, что ваша инициализация неверна. Вы просто перезаписываете первый узел снова и снова. –

+0

Вы забыли о nodePtr = nodePtr-> nextPtr; ? –

ответ

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

+0

+ то же самое в печатиLinkedList –

+0

@oleg_g Yup, иначе он закончит с приятным бесконечным циклом ... – 2013-02-11 21:16:24

+0

@oleg_g Также добавлен NULL-check. – 2013-02-11 21:18:45

Смежные вопросы