2016-08-19 2 views
2

Я создал программу простого связанного списка и в это время, пока я печатаю значения в связанном списке, они входят в бесконечный цикл. Я присоединяю этот код. Я сделал temp1 для цели обхода. 'a' для хранения адреса головного узла. 'temp' для создания нового узла.При печати статуса списка ссылок программа входит в цикл infinte

// Creating a menu deriv en program of single link list 
#include<stdio.h> 
#include<conio.h> 
#include<stdlib.h> 
struct node{ 
    int data; 
    struct node *next; 
}; 
void main() 
{ 
    struct node *a; 
    char ch; 
    struct node *temp; 
    struct node *temp1; 
    a=NULL; 
    clrscr(); 
    do 
    { 
     if(a==NULL) 
     { 
      temp=(struct node*)malloc(sizeof(struct node)); 
      printf("Enter Data"); 
      scanf("%d",&temp->data); 
      temp->next=NULL; 
      a=temp; 
     } 
     else 
     { 
      temp=(struct node*)malloc(sizeof(struct node)); 
      printf("Enter data element"); 
      scanf("%d",&temp->data); 
      temp1=a; 
      while(temp1->next!=NULL) 
      { 
       temp1=temp1->next; 
      } 
      temp1->next=temp; 
     } 
     printf("Do You Wish to continue"); 
     ch=getch(); 
    } 
    while(ch=='Y'||ch=='y'); 
    printf("Status of the link list"); 
    temp1=a; 
    while(temp1!=NULL) 
    { 
     printf("%d ",temp1->data); 
     temp1->next=temp1; 
    } 
    getch(); 
} 

Пожалуйста, помогите !!!

+1

, возможно, будет изменен 'temp1-> next = temp1;' с 'temp1 = temp1-> next;' решит эту проблему. Кроме того, вы должны освободить выделенную память. –

+1

А также else-block need 'temp-> next = NULL;' – BLUEPIXY

+0

@Bob__Where я должен внести изменения, которые вы предложили – user6547375

ответ

0

В вашем коде вы делаете две ошибки.

первая ошибка

После ввода в else блок U не устанавливающего next указатель вновь созданного узла NULL .so код внутри другой должен быть, как это ...

else 
     { 
     temp=(struct node*)malloc(sizeof(struct node)); 
     temp->next=NULL; 
     printf("Enter data element"); 
     scanf("%d",&temp->data); 
     temp1=a; 
     while(temp1->next!=NULL) 
      { 
      temp1=temp1->next; 
      } 
     temp1->next=temp; 
     } 

2-ая ошибка

При попытке напечатать связанный список, внутри while loop продвижение указателя обхода является wrong.So код для печати linked list должно быть это ...

while(temp1!=NULL) 
    { 
    printf("%d ",temp1->data); 
    temp1=temp1->next; 
    } 

Try визуализировать ситуацию, опираясь на ситуацию на бумагу, тогда вам будет понятнее.

+0

Спасибо большое, я получил свою ошибку Спасибо, что пощадил меня и направил меня – user6547375

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