2016-12-13 4 views
1

I mit verknüpften Listen in C von Position zu verstehen versuchen Einfügen ich diesen Code über http://www.cprogramming.com/snippets/source-code/singly-linked-list-insert-remove-add-count gefunden:Verständnis Einfügen von Position mit verknüpften Listen

void addafter(int num, int loc) 
{ 
    int i; 
    struct node *temp,*left,*right; 
    right=head; 
    for(i=1;i<loc;i++) 
    { 
    left=right; 
    right=right->next; 
    } 
    temp=(struct node *)malloc(sizeof(struct node)); 
    temp->data=num; 
    left->next=temp; 
    left=temp; 
    left->next=right; 
    return; 
} 

Es kompiliert und funktioniert gut, aber ich verstehe nicht, dieser Teil:

left->next=temp; 
left=temp; 
left->next=right; 

Wenn der nächste Knotenzeiger in der linken Punkte Temp dann wäre es nicht mit links = Temp erhalten überschrieben? Könnten Sie das folgendermaßen umschreiben:

left->next=temp; 
temp->next=right 

Kann mir jemand das bitte erklären? Vielen Dank.

+0

Ja, einige Ihrer Code ändern, Ihre Alternative ist genauso gültig wie der Code Originalen. –

+0

Warum also left = temp verwenden? – user3283146

+1

Dafür müssen Sie den Autor fragen, es ist nichts, was irgendjemand sonst beantworten könnte. Ich sehe keinen Grund dafür. –

Antwort

0

Ihr Vorschlag ist derselbe wie im Originalcode. Es ist Wert zu Zeiger zugewiesen (als temp, links, rechts sind Zeiger), so Listenelement nicht durch das Schreiben

left=temp; 

aber Element unter „temp“ Zeiger wird zur Verfügung stehen auch unter „links“ Zeiger überschrieben wird.

Persönlich stimme ich Ihnen zu, dass Ihr Code leichter zu verstehen/zu lesen ist. Es geht darum, Code zu schreiben, der realen Aktionen entspricht und ihn nicht mit zusätzlichen Variablen oder Zuweisungen verdeckt.

Wie auch immer, nachdem Sie verstanden haben, wie die verkettete Liste funktioniert, können Sie erwarten, welche Funktion das hat, und jede Implementierung ist viel einfacher zu lesen und zu verstehen.

0

Ihre Lösung ist genau richtig.
Noch besser wäre es, den rechten Zeiger zu eliminieren.

temp->next = left->next 
left->next = temp 

Hinweis: Vielleicht möchten Sie oben

Verwandte Themen