2013-11-14 3 views
-1

Я пытаюсь напечатать связанный список, но он не распечатал весь член в списке. Вы можете объяснить, в чем проблема в моем коде? строка кода (newhead = newhead-> next) перемещается, даже остальная часть списка находится на другой функции?листинг список вопросов печати?

#include <stdio.h> 
#include <stdlib.h> 

struct test_struct{ 
    int data; 
    struct test_struct *next; 
}; 

struct test_struct* create(); 
void add_node(); 
int main() 
{ 
    add_node(); 

    return 0; 
} 

void add_node() 
{ 
    struct test_struct* head = create(); 
    struct test_struct* newhead; 
    newhead = malloc(sizeof(struct test_struct)); 
    newhead->data=2; 
    newhead->next=head; 
    head=newhead; 
    while(newhead->next != NULL) 
    { 
    printf("%d\n",newhead->data); 
    newhead=newhead->next; 
    } 



} 


struct test_struct* create() 
{ 

    struct test_struct* head=NULL; 
    struct test_struct* temp = (struct test_struct*)malloc(sizeof(struct test_struct)); 
    if(NULL==temp) 
    { 
    printf("error in memory"); 
    return 0; 
    } 
    temp->data=5; 
    temp->next=head; 
    head=temp; 

    return head; 
} 
+2

Какой результат вы ожидали? Какой результат вы получили? – Chowlett

+0

Дайте какой-нибудь результат !!! –

+0

Я хочу поставить как 2 5. – Rishav

ответ

3

ваше время цикла останавливается, когда он находится на узле, без next узла; он не печатает данные на этом узле.

Вместо этого вы хотите остановиться, когда он указывает на отсутствие узла; то есть, только после того, как он «упал с конца» в списке:

while(newhead != NULL) 
{ 
    printf("%d\n",newhead->data); 
    newhead=newhead->next; 
} 
+0

очень хорошая точка! – Guilherme

1

линия 26 должна быть while (newhead != NULL).

Если вы хотите, чтобы продолжать расти в этом, вы могли бы также рассмотреть назначение каждой функции, так как add_node() и create() делают почти то же самое, плюс add_node() также печатает список, который может быть целью отдельной функции.

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