在打印链接列表的状态时,程序正在进入infinte循环

时间:2016-08-19 11:56:03

标签: c data-structures

我制作了一个简单链接列表的程序,在此我正在打印链表中的值时,它进入无限循环。 我特此附上代码。 我已经将temp1用于遍历目的。 '一个'用于存储头节点的地址。 '温度'用于创建新节点。

// 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 个答案:

答案 0 :(得分:0)

在你的代码中你犯了两个错误。

  第一个错误

进入else块后,你没有将新创建的节点的next指针设置为NULL。所以你的代码应该是这样的......

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

第二个错误

在尝试打印链表时,在while loop内部遍历指针的进展是错误的。所以打印linked list的代码应该是这样......

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

尝试通过在纸上绘制情况来可视化情况,然后你会更清楚。