Mit single-versus double-Zeiger in verketteten Listen implementiert in C

Ich dies Schreibe code für das hinzufügen element am Ende der verlinkten Liste:

struct node{
    int info;
    struct node* link;
};

void append ( struct node **q, int num )  
{

struct node *temp, *r ;

if ( *q == NULL )       //if the list is empty, create first node
{
    temp = (struct node*) malloc ( sizeof ( struct node ) ) ;
    temp -> info = num ;
    temp -> link = NULL ;
    *q = temp ;        
}
else{
    temp = *q ;         

    /* go to last node */
    while ( temp -> link != NULL )
        temp = temp -> link ;

    /* add node at the end */
    r = (struct node *)malloc ( sizeof ( struct node ) ) ;
    r -> info = num ;
    r -> link = NULL ;
    temp -> link = r ;
}
}

und ich rufe die append Funktion so:
append(&list, 10); wo list ist der Zeiger auf die verkettete Liste

Dieser code funktioniert, aber wenn ich einzelnen Zeiger im append-Funktion(mit *q anstelle von ** * * f) und nehmen Sie entsprechende änderungen vor (wie unten getan und auch wenn ich es nennen), es funktioniert nicht. Was ist falsch mit dem code unten?:

void append ( struct node *q, int num )  
{

struct node *temp, *r ;

if ( q == NULL )       //if the list is empty, create first node
{
    temp = (struct node*) malloc ( sizeof ( struct node ) ) ;
    temp -> info = num ;
    temp -> link = NULL ;
    q = temp ;        
}
else{
    temp = q ;         

    /* go to last node */
    while ( temp -> link != NULL )
        temp = temp -> link ;

    /* add node at the end */
    r = (struct node *)malloc ( sizeof ( struct node ) ) ;
    r -> info = num ;
    r -> link = NULL ;
    temp -> link = r ;
}
}
  • Warum ist diese Kennzeichnung als C++?
  • da C und C++ sind eng miteinander verbunden, und ich war der Annahme, jemand mit dem wissen von C++ könnten in der Lage sein, mir zu helfen hier.
  • Übrigens, dies ist ein schlechter Ansatz, um das Anhängen eines Elements zu der Liste, weil die Laufzeit steigt Linear mit der Anzahl der Elemente. Der traditionelle Ansatz ist es, stets einen Zeiger auf beide enden der Liste, die es ermöglicht das Anhängen geschieht in konstanter Zeit.
InformationsquelleAutor Jatin | 2012-04-06
Schreibe einen Kommentar