2012-10-17 83 views
0

要檢查示例列表imlpementation我嘗試了下面的代碼。但是每當我試圖顯示結果時,它都會進入一個循環。我無法找到哪裏出錯。爲什麼我無法顯示正確的列表值?

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

回答

1

這裏有兩個錯誤。

  1. 您只分配一次「新」。這意味着每次用戶輸入「1」並實際將其鏈接到自身時,您都會重複使用同一個節點。
  2. 根本不應該爲「temp」分配節點,因爲您沒有使用它。實際上,你丟失了指向該分配節點的指針:case 3: temp=head;這被稱爲「內存泄漏」。

我建議你多學習一下指針;他們似乎混淆你。

+0

但每次用戶按1,我猜測新的「新」節點被創建並鏈接。如果它沒有發生,因爲我在想如何在每次用戶按下1時創建新節點? – Mistu4u

+0

實際上創建新節點的代碼是'malloc(sizeof(node))'調用。 –

0

我可以看到以下問題:

1)你是不是用的選項循環,結果用戶可以只做一件事(無論是在程序的每次運行插入或顯示器)。如果他選擇插入,他將無法顯示,如果他選擇顯示,則不會顯示任何列表。

2)每次要在列表中插入新節點時,都需要創建一個新節點。目前,您只是更改同一節點的數據(由新指出)。

1

爲什麼我覺得這是一個家庭作業問題?

下面是一些提示:

  1. head分配,但從來沒有初始化,這是你從開始打印。坦率地說,我很驚訝它不會崩潰。

  2. 您的菜單允許您打印列表或輸入一個數字,之後程序結束。我懷疑你輸入了一個數字,然後再次運行程序打印出列表。程序狀態不會在運行之間保留。

+0

爲什麼downvote這個答案? – ouah

+0

您可以投票回來。 ;-)也許我很粗魯,對此我表示歉意。但是,他似乎沒有做太多的事情來自己解決這個問題,而且代碼表明初學者缺乏理解。他的一些其他問題很容易通過查閱標準參考來回答,所以它看起來像是一個第一手段,而不是對我的需要。 –

+0

*您可以投票回覆*我是一個贊成的人;) – ouah

相關問題