2016-07-12 16 views
0

Dies ist mein Code zum Löschen von Anfang einer verknüpften Liste, die Student-Datensatz enthält.Löschen von Anfang einer verknüpften Liste

int delete (struct student **q) { 
     struct student *current; 
     current=(struct student *)malloc(sizeof(struct student)); 
     current=head; 
     head=current->link; 
     free(current); 
     //display(current); 
     return 1; 
    } 

Das ist die Struktur

struct student 
{ 
    int id; 
    char name[10]; 
    char gender[10]; 
    struct student * link; 
}*head; 

Aber anstatt den gesamten Datensatz zu löschen nur die ID auf 0

before deletion 
    ID  Name Gender 
    1 Yazhini Female 
    2  Anu Female 
    3  Janavi Female 
    4 Haritha Female 

nach dem Löschen

ID  Name Gender 
    0 Yazhini Female 
    2  Anu Female 
    3  Janavi Female 
    4 Haritha Female 
+0

'deletig' ... was ist das? –

+0

[Bitte lesen Sie die Diskussion darüber, warum der Rückgabewert von 'malloc()' und die Familie in 'C' nicht umgewandelt werden soll.] (Http://stackoverflow.com/q/605845/2173917). –

+0

Sie kümmern sich um die Erstellung eines [___MCVE___] (http://stackoverflow.com/help/mcve)? –

Antwort

0

Die geändert wird Spaß ction aussehen kann auf folgende Weise

int delete(struct student **head) 
{ 
    int success = *head != NULL; 

    if (success) 
    { 
     struct student *current = *head; 
     *head = current->link; 
     free(current); 
    } 

    return success; 
} 

Was Ihre Funktion ist es dann zumindest ein Speicherleck, da zunächst ein Speicher für einen Knoten zugeordnet ist, und seine Adresse zugewiesen die variablen Strom

current=(struct student *)malloc(sizeof(struct student)); 

und dann wird diese Variable neu zugewiesen.

current=head; 

Auch ist nicht klar, was der Parameter q bedeutet.

+0

das funktioniert .. danke sooo viel @vlad – aish

+0

@aish Nein überhaupt. :) –