为什么我无法显示正确的列表值?

时间:2012-10-17 18:38:48

标签: c list linked-list

要检查示例列表实现,我尝试了以下代码。但每当我试图显示结果时,它就会进入一个循环。我无法找到它出错的地方。

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

typedef struct linkedlist
{
    int data;
    struct linkedlist *next;
}node;

int main()
{
    int ch,num;

    node *head=NULL;
    head=(node *)malloc(sizeof(node));
    node *new=NULL;
    new=(node *)malloc(sizeof(node));
    node *temp=NULL;
    temp=(node *)malloc(sizeof(node));
    printf("\n1.Insert to list");
    printf("\n3.Display the list");
    printf("\n Enter Choice->");
    scanf("%d",&ch);
    switch(ch)
    {
     case 1:printf("\n Enter data->");
            scanf("%d",&num);
            new->data=num;
            new->next=NULL;
            head->next=new;
            break;

     case 3: temp=head;
            while(temp!=NULL)
            {
                printf("\n %d",temp->data);
                temp=temp->next;
            }


                break;
     default:printf("Wrong Choice");
              break;

    }
    return 0;
 }

3 个答案:

答案 0 :(得分:1)

这里有两个错误。

  1. 你只分配一次“新”。这意味着每次用户输入“1”并将其实际链接到自身时,您就会重复使用相同的节点。
  2. 您根本不应该为“temp”分配节点,因为您没有使用它。实际上,您正在使用此行丢失指向该分配节点的指针:case 3: temp=head;这称为“内存泄漏”。
  3. 我建议你更多地学习指针;他们似乎让你感到困惑。

答案 1 :(得分:1)

为什么我觉得这是一个家庭作业问题?

以下是一些提示:

  1. head已分配,但从未初始化,这是您开始打印的地方。坦率地说,我很惊讶它没有崩溃。

  2. 您的菜单允许您打印列表或输入一个数字,然后程序结束。我怀疑你正在输入一个数字,然后再次运行程序打印出列表。程序状态不会在运行之间保留。

答案 2 :(得分:0)

我可以看到以下问题:

1)您没有使用选项循环,因此用户只能在程序的每次运行中执行一项操作(插入或显示)。如果他选择插入则无法显示,如果他选择显示,则无法显示任何列表。

2)每次要在列表中插入新节点时,都需要创建一个新节点。目前,您只是更改同一节点的数据(由new指向)。