2016-07-09 11 views
-1

Ich wollte 5 Knoten erstellen und einen neuen Knoten zwischen dem 3. und 4. einfügen. Hier ist der Code .. Wenn ich es ausführe, bekomme ich weder Fehler noch Ausgabe. Was habe ich falsch gemacht ? Danke im Voraus.C - Einfügung der verknüpften Liste

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

typedef struct node{ 

       int data; 
       struct node *next; 

}node; 


int main(void) { 

       struct node *root, *newElement, *temp; 

       // first node is created. 
       root = (node*)malloc(sizeof(node)); 
       root->data = 11; 

       // to create 4 nodes more after the first one is created. 
       int i; 
       for (i=0; i <= 3; i++){ 

           root->next = (node*)malloc(sizeof(node)); 
           root = root->next; 
           root->data = (i * 10); 

       } 

       // new node to insert. 
       newElement = (node*)malloc(sizeof(node)); 
       newElement-> data = 1; 



       temp = (node*)malloc(sizeof(node)); 

       temp = root->next->next; 

       root->next -> next = newElement; 

       newElement->next = temp; 


       // print the values 
       int j; 
       for(j=0; j<=4; j++){ 
        root = root->next; 
        printf("%d\n", root->data); 
       } 


       return 0; 

} 
+0

Ihre Schnur Einsatz zwischen 2. und 3.. – BLUEPIXY

+0

1) Die Operation kann nicht erneut eingefügt werden. und Sie können die Liste nicht freigeben. 2) Kann im letzten Element nicht erkannt werden. 3) Es verursacht ein Speicherleck. – BLUEPIXY

+2

Der Weg zu zeigen, dass Ihre Frage beantwortet wurde, ist eine Antwort zu akzeptieren. Bitte fügen Sie die Antwort nicht in die Frage ein, und fügen Sie dem Titel bitte nicht das Wort "Gelöst" hinzu. Wenn keine der vorhandenen Antworten Ihr Problem gelöst hat, können Sie Ihre eigene Antwort posten und akzeptieren. –

Antwort

0

Sie root modifizieren, wenn Sie die Knoten erstellen, sollten Sie irgendeine Art von Iterator erstellen, die an der Wurzel beginnt und wird stattdessen modifiziert, so dass Sie nicht über die Ausgangsposition verlieren.

Versuchen Sie Folgendes:

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

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


int main(void) { 
    struct node *root, *newElement, *temp, *iterator; 

    // first node is created. 
    root = (node*)malloc(sizeof(node)); 
    iterator = root; 
    iterator->data = 11; 

    // to create 4 nodes more after the first one is created. 
    int i; 
    for (i=0; i <= 3; i++){ 
     iterator->next = (node*)malloc(sizeof(node)); 
     iterator = iterator->next; 
     iterator->data = (i * 10); 
    } 

    // new node to insert. 
    newElement = (node*)malloc(sizeof(node)); 
    newElement-> data = 1; 

    temp = (node*)malloc(sizeof(node)); 

    iterator = root; 
    temp = iterator->next->next; 

    iterator->next->next = newElement; 

    newElement->next = temp; 

    iterator = root; 
    // print the values 
    int j; 
    for(j=0; j<=4; j++){ 
     printf("%d\n", root->data); 
     iterator = iterator->next; 
    } 

    return 0; 
} 
1
root = temp = (node*)malloc(sizeof(node));//no need cast from void* 
temp->data = 11; 

int i; 
for (i=0; i <= 3; i++){ 
    //don't change root 
    temp->next = (node*)malloc(sizeof(node)); 
    temp = temp->next; 
    temp->data = (i * 10); 
} 
temp->next = NULL;//next of last node need set to NULL 

newElement = (node*)malloc(sizeof(node)); 
newElement-> data = 1; 

//temp = (node*)malloc(sizeof(node));//no need (this make memory leak) 
temp = root->next->next; 
root->next->next = newElement; 
newElement->next = temp; 


for(temp = root; temp; temp = temp->next){ 
    printf("%d\n", temp->data); 
} 
1

Wenn Sie die vier neuen Knoten erstellen, geben Sie Ihre root Zeiger stromabwärts in der Liste und losen Zugriff auf die Upstream-Elemente zuweisen. Intead, setze temp = root vor der Schleife, dann verwende stattdessen temp innerhalb der Schleife.

  temp = root; 
      int i; 
      for (i=0; i <= 3; i++){ 
          temp->next = (node*)malloc(sizeof(node)); 
          temp = temp->next; 
          temp->data = (i * 10); 
          temp->next = NULL; 
      }