2013-07-31 3 views
0

Это как моя программа, но она не выводит полный перечень только данные узла, который введенные last.I не мог понять, что это проблема в соединении или нет:Единый список печати ошибок

основная структура узел

struct node 
    { 
     int data; 
     struct node *link; 
    }; 

определение заголовка в начале списка ссылок:

struct node *header; 

функции для вставки и печати:

void insertFront_sl(); 
    void print_sl(); 

Основная функция:

void main() 
    { 
    clrscr(); 
    header=(struct node *)malloc(sizeof(struct node)); 
    header->link=NULL; 
    header->data=NULL; 
    insertFront_sl(); 
    insertFront_sl(); 
    insertFront_sl(); 
    insertFront_sl(); 
    print_sl(); 
    getch(); 
    } 


    void insertFront_sl(){ 
    struct node *temp; 
    int x; 
    temp=(struct node *)malloc(sizeof(struct node)); 
    if(temp==NULL) 
    { 
    printf("\nMeM0rY Insufficient .."); 
    } 
    else 
    { 
     printf("\nGot New Node \nNow Insert Data Into Node : "); 
    scanf("%d",&x); 


    temp->data=x; 
    header->link=temp; 


    } 

    } 

    void print_sl(){ 
    struct node *ptr; 
    ptr=header; 
    while(ptr->link !=NULL) 
    { 
     ptr=ptr->link; 
     printf("%d\t",ptr->data); 
    } 


    } 
+0

Не могли бы вы отобразить выходные данные? –

+1

Вы никогда не устанавливаете 'temp-> link' –

+0

' insertNode_sl() 'багги, ему не нужно обновлять' header' (возможно, только если ссылка header-> равна NULL, только при первом вводе узла). Но, пожалуйста, отпечатайте свой код, чтобы его было легче читать. В вашем коде есть другие проблемы с дизайном, но это вне сферы действия здесь. –

ответ

1

Каждый раз, когда вы создаете новый узел, вы теряете ссылку на узлы, созданные вами ранее. После добавления нового узла:

header->link=temp; 

вам нужно установить голова списка на новый узел:

header = temp; 

Вы также должны держать узел в качестве ссылки на баз (первый узел) и используйте эту базу в качестве отправной точки для печати списка.

+0

temp-> link = header-> link; temp-> data = x; header-> link = temp; –

2

header->link=temp; отбрасывает хвост списка. Оно должно быть:

temp->link = header; 
header = temp; 
+0

Наконец-то получил решение: –

0

Это как моя программа, но она не выводит полный перечень только данные узла, который ввели последним.

header->link=temp; 

Проблема заключается в том, что вы всегда добавление нового элемента к самому текущему узлу. Вы теряете ссылку на ранее добавленный узел и вызываете утечку памяти.

0

Проблема в связи. Каждый раз, когда вы вставляете, вы указываете указатель в узле заголовка на самую новую ссылку, которая перезаписывает значение старого указателя (которое указывает на предыдущую новую ссылку). Вместо этого вам необходимо убедиться, что вы установили ссылку temp-> на предыдущую «новую» ссылку, прежде чем заголовок будет ссылаться на temp.

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