2016-04-14 13 views
-3

Ich möchte einen Knoten von einer bestimmten Position in einer Liste löschen, aber meine Löschfunktion funktioniert nicht. Bitte helfen Sie mir.Löschen eines Knotens von einer bestimmten Position in der verknüpften Liste

Vielen Dank im Voraus.

Node* Delete(Node *head, int position) 
{ 
    int count=0; 
    Node* temp, *temp1, *temp2; 
    temp = head ; 
if(head==NULL){ 
    return 0; 
    } 
else if(position == 0) 
    { 

    head = head->next; 
    free(temp); 
    return head; 
} 
    else{ 
     while(count!= position-1) 
     { 
     temp = temp->next; 
     count++; 
    } 
    temp1 = temp->next; 
    temp->next = temp1->next; 

    free(temp1); 
    return temp; 
} 

return head; 
} 
+0

* Wie * funktioniert es nicht? Erhalten Sie Buildfehler? Stürzt ab? Hast du versucht, in einem Debugger zu laufen? Den Code Zeile für Zeile durchgehen, um zu sehen, wo es falsch läuft? –

+0

Bitte definieren Sie das gewünschte Verhalten. Was sollte der Rückgabewert sein? – MikeCAT

+2

Meine Vermutung: 'return temp;' sollte entfernt werden. – MikeCAT

Antwort

1

ersetzen return temp; mit return head; gehören auch die Logik zu behandeln, wenn es Knoten weniger als Position.

3

Formatieren Sie zuerst Ihren Code richtig.

Entfernen Sie dann return temp;, damit der vorherige Teil der Liste nicht verloren geht.

Sie können auch zuerst return head; entfernen, da die Funktion sowieso im letzten Teil return head; tut.

Node* Delete(Node *head, int position) 
{ 
    int count=0; 
    Node *temp, *temp1, *temp2; 
    temp = head; 
    if(head==NULL){ 
    return NULL; 
    } 
    else if(position == 0) 
    { 
    head = head->next; 
    free(temp); 
    } 
    else{ 
    while(count!= position-1) 
    { 
     temp = temp->next; 
     count++; 
    } 
    temp1 = temp->next; 
    temp->next = temp1->next; 

    free(temp1); 
    } 

    return head; 
} 

Beachten Sie, dass return 0; gültig ist, weil 0 eine Null-Zeiger-Konstante (N1256 6.3.2.3 Pointers) ist und es auf einen Zeiger Umwandlung definiert ist, aber NULL Verwendung ist besser, weil sie deutlich machen wird, dass es zu tun hat mit einem Zeiger.

1

Ich möchte nur MikeCAT's Antwort hinzufügen. Sie sollten auch die Bedingung behandeln, wenn die Anzahl der Knoten unter der Position liegt.

Einer der Wege, dies zu tun sein könnte:

while(count!= position-1) { temp = temp->next; if(temp == NULL) return head; count++; }

0

return temp entfernen und return head schreiben. Überprüfen Sie darüber hinaus, ob die Position größer als die Anzahl der Knoten in der verknüpften Liste ist. Bevor ich den Zeiger frei gebe, würde ich vorschlagen, temp1->next=NULL und dann free(temp1) hinzuzufügen.

Verwandte Themen