2016-04-02 12 views
1

Ich arbeite an Linked-List in C, und ich stoße auf dieses Problem: Ich verstehe die folgende Aussage nicht. Hier meine Struktur für meine verkettete ListeVerknüpfte Liste/Zeiger mit dieser Formularliste [0]

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

und hier den Code arbeite ich an:

void reverse(reverse **list)`void reverse(reverse **list) 
{ 
    struct node * prev = NULL; 
    struct node * next; 
    struct node * current = list[0]; 
    while(current!= NULL) 
    { 
     next = current­>next; 
     current­>next = prev; 
     prev = current; 
     current = next ; 
    } 
    list[0] = prev; ­­­­­­­­­­­­­­­­­­­­­­­­­ 
} 

Was ist die Liste [0] bedeuten? Ist es das erste Element meiner Linked-List? Ich weiß meine Frage scheint dumm, aber ich kann meine Antwort nirgendwo finden.

Vielen Dank für Ihre Hilfe.

+0

Es ist Linked-List-Code von jemandem, der denkt, dass Arrays und Zeiger die gleichen sind und so verschleiert gunge schreibt :( –

+0

warum ist Ihre Funktion und Ihre Strukturtyp beide "Reverse" genannt –

Antwort

2

list[0] ist ein Zeiger auf den ersten Knoten und list ist ein Zeiger auf diesen Zeiger.

list[0] ist identisch mit *(list+0), die identisch ist mit *(list) oder *list.

Es ist nur eine andere Form der Syntax, es bedeutet nicht, dass list auf ein Array zeigt. Die Adresse des Zeigers zum ersten Knoten wird an die Funktion reverse übergeben. Dann wird der Zeiger auf den Zeiger dereferenziert (*list), so dass der ursprüngliche Zeiger außerhalb der Funktion geändert wird. Wenn Sie dies nicht tun würden, würde sich der ursprüngliche Zeiger nicht ändern und er würde nicht mehr auf den Anfang der Liste zeigen.