2016-07-27 5 views
1

リンクリストの開始時にノードを追加しようとしていますが、コード内に最後の要素しか表示されません。なぜこれが問題なのですか?表示機能リンクリストコードが機能しない

#include <stdio.h> 
//node structure 
struct node 
{ 
    int data; 
    struct node *next; 

}; 

//構造体

//datatype declaration 
typedef struct node node ; 
// head pointer which will indicate starting point of link list 
node *head; 

//create fuction that will insert values into note and its next pointer field 
void create(int num); 
//display function will display the link list 
void display(); 

main() 
{ 

     int num,i,n; 

     printf("enter the nno of node to create : "); 
     scanf("%d",&n); 

     for(i=0;i<n;++i) 
     { 
      printf("enter data for node %d= ",i+1); 
      scanf("%d",&num); 
      create(num); 



     } 
     display(); 

//表示コール

} 
void create(int num) 
{ 
     head=NULL; 
     node *temp; 
     temp=(node*)malloc(sizeof(node)); 
     temp->data=num; 
     temp->next=head; 
     head=temp; 




return; 
} 

//関数()終了

void display() 
{ 
    node *temp1; 
    temp1=head; 

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


    } 

return; 
} 

// fucntion表示を()を作成

答えて

0

あなたの主な問題は終わら:

head=NULL; 

このように、あなたのライン

temp->next=head; 

は常にNULLする次を設定します。したがって、あなたのリストは全て長さ1の です。

私はstatic(ひいては 最初からゼロ)であることをheadを宣言、またはmainheadをintializingのいずれかを示唆しています。

0

あなたの表示機能は罰金だ、あなたの関数は次のようなものになります作成します。リストが空の場合、このような機能を作成

void create(int num) 
{ 
node* temp = new node(); 

     if(head ==NULL) 

     { temp->data = num; 
      head = temp; 
      head->next = NULL; 
     } 
     else if(head->next == NULL) 
     { 
     temp->data = num; 
     head->next = temp; 
     } 
     else 
     { 
     node* temp2 = head; 
     while(temp2->next !=NULL) 
     { temp2 = temp2->next; 
     } 
     temp->data = num; 
     temp2->next = temp; 
     } 



return; 
} 

が依存するノードを配置します、一つのノードを持っている、または複数のノード最後の位置に挿入されます。これで頭の前に挿入するか、リンクリスト用語の機能(InsertBeforeFirst)に挿入することができます。もちろん、node * head up topをNULLに初期化する必要があります。

関連する問題