Knoten aus LinkedList löschen



  • super danke, das hat funktioniert. ich hätte vielleicht noch ein paar fragen zu deiner version:

    1)Du hast hier diese Zeile geschrieben

    node* next_node = cursor->link();
    

    Das heiß next_node soll auf den nächsten Knoten also dem Knoten nach dem cursor zeigen. Aber wenn jetzt die Liste nur einen Knoten hat und cursor auf diesen zeigt, dann kann next_node ja nicht auf den nächsten Zeigen weil es keinen nächsten gibt, dann müsste doch ein fehler geworfen werden oder?

    2)Du schreibst in dem einen if

    head_ptr = next_node;
    

    und im else zweig

    precursor->set_link(next_node);
    

    Könnte ich da im else-zweig nicht auch das statt des oberen statements schreiben?

    precursor = next_node
    


  • Äh. Hab ich ein Posting/einen Thread übersehen wo du schreibst dass es sich um eine Hausübung handelt oder sowas?!?

    Ich verstehe einfach nicht wie man eine single-linked-list implementieren kann (die bis auf die remove Funktion anscheinend auch funktioniert) und dann diese Fragen stellen... *grübel*



  • Nein hast du nicht, aber wie du siehst hat es leider funktioniert...ich habe auch dazu ein buch verwendet wo ich ein paar sachen übernehmen konnte...

    könntest du mir vielleicht trotzdem diese fragen beantworten, auch wenn sie für dich lächerlich erscheinen...? 😞

    matti



  • ad 1: wenn es funktioniert, dann wird cursor->link() wohl 0 zurückliefern wenn es keinen weiteren Knoten mehr gibt. Da der Rest des Codes nicht nur damit klarkommt sondern auch erwartet dass das passiert... funktioniert es eben.

    ad 2: nein. nein-nein-nein-nein. precursor ist der ZEIGER auf die "node vor dem cursor". precursor = next_node würde den ZEIGER namens "precursor" auf eine andere Node zeigen lassen. precursor->set_link(next_node) tut etwas anderes.

    p.S.: das "precursor = 0" im "if(cursor == 0)" kannst du im übrigen streichen, das darf eigentlich nie notwendig sein.



  • ad 2: nein. nein-nein-nein-nein. precursor ist der ZEIGER auf die "node vor dem cursor". precursor = next_node würde den ZEIGER namens "precursor" auf eine andere Node zeigen lassen. precursor->set_link(next_node) tut etwas anderes.

    Ich mein es ist ja schön, dass dies was anderes macht, nur würde ich halt auch gerne wissen, was es dann anderes macht? - denn für micht wird damit mit set_link der precursor pointer auf den next_node gesetzt....was macht dieses nun anderes, als precursor = next_node...??



  • Oh Mann...

    Also. Ich bin "precursor", ein Zeiger. Ich stehe rum und zeige mit dem Finger auf ... ein Haus. Als Zeiger ist das schliesslich mein Job. Das Haus ist "irgendeine node". Es ist grün. In dem Haus steht ... Reinhold Messner. Reinhold Messner ist auch ein Zeiger. Er tut auch seinen Job - er zeigt aus dem Fenster auf ein anderes Haus, wir wissen aber nicht auf welches. Reinhold Messner ist "link". Neben mir steht dann noch Nina Hagen, sie ist auch ein Zeiger, und sie zeigt auf ein kleines rotes Haus. Nina Hagen ist "next_node". Nina Hagen und ich stehen übrigens in einem grossen Autobus der Marke "sequence".

    Du bist "die CPU", ein Aktionskünstler mit seltsamem Namen, und der Angewohnheit seltsame Dinge zu tun wie Leuten die Hand zu verdrehen.
    Wir alle spielen ein Stück.

    ---

    Bühnenstück: precursor->set_link(next_node);

    Du kommst zu mir, guckst mich schief an und siehst dass ich auf ein grünes Haus zeige. Du guckst Nina Hagen an und siehst dass sie auf ein kleines rotes Haus zeigt. Du merkst dir beides. Du setzt dir eine Kappe der Marke "set_link" auf. Du gehst in das grüne Haus. Ende 1. Akt.
    2. Akt: Du suchst und findest Reinhold Messner, und verdrehst seine Hand so dass er nun auch, gleich wie Nina Hagen, auf das kleine gelde Haus zeigt. Du verlässt das grüne Haus wieder.
    Ich zeige nach wie vor auf das grüne Haus, Reinhold Messner zeigt aber auf das kleine rote Haus. Nina Hagen singt vor sich hin.
    Vorhang, Applaus, Ende.

    ---

    Bühnenstück: precursor = next_node;

    Du kommst zu mir, guckst garnicht was ich so macht, sondern guckst Nina Hagen an. Du siehst dass sie auf ein kleines rotes Haus zeigt, und verdrehst meine Hand so dass ich auch auf das kleine rote Haus zeige.
    Ich zeige jetzt auf das kleine rote Haus, Reinhold Messner zeigt aber immernoch dorthin wo immer er auch zu beginn des Stückes hingezeigt hat Haus. Nina Hagen tanzt.
    Vorhang, Buh-Rufe, Ende.

    ---

    Anders gesagt ... der Unterschied ist:

    precursor->set_link(next_node)
    // ist gleichbedeutend mit
    precursor->link = next_node;
    

    dagegen:

    precursor = next_node;
    

    ist (und macht) eben ganz was anderes.
    Wie um alles in der Welt kann man diesen Unterschied nicht verstehen?

    BTW: die Rollenverteilung zu Beginn unseres Stückes:

    Grosser Autobus:        "(*this)"             Typ: 'sequence'
        "Ich":              "precursor"           Typ: Zeiger auf 'node'
        Nina Hagen:         "next_node"           Typ: Zeiger auf 'node'
    
    Grünes Haus:            "(*precursor)"        Typ: 'node'
        Reinhold Messner:   "(*precursor).link"   Typ: Zeiger auf 'node'
    
    Kleines rotes Haus:     "(*next_node)"        Typ: 'node'
        uncredited          "(*next_node).link"   Typ: Zeiger auf 'node'
    

    Nu lies es nochmal von vorne.

    Wenn dus dann noch nicht verstanden hast dann lass es dir von jmd. anderem erklären oder hänge C++ und das Programmieren an den Nagel.



  • Oh Mann...

    Also. Ich bin "precursor", ein Zeiger. Ich stehe rum und zeige mit dem Finger auf ... ein Haus. Als Zeiger ist das schliesslich mein Job. Das Haus ist "irgendeine node". Es ist grün. In dem Haus steht ... Reinhold Messner. Reinhold Messner ist auch ein Zeiger. Er tut auch seinen Job - er zeigt aus dem Fenster auf ein anderes Haus, wir wissen aber nicht auf welches. Reinhold Messner ist "link". Neben mir steht dann noch Nina Hagen, sie ist auch ein Zeiger, und sie zeigt auf ein kleines rotes Haus. Nina Hagen ist "next_node". Nina Hagen und ich stehen übrigens in einem grossen Autobus der Marke "sequence".

    Du bist "die CPU", ein Aktionskünstler mit seltsamem Namen, und der Angewohnheit seltsame Dinge zu tun wie Leuten die Hand zu verdrehen.
    Wir alle spielen ein Stück.

    ---

    Bühnenstück: precursor->set_link(next_node);

    Du kommst zu mir, guckst mich schief an und siehst dass ich auf ein grünes Haus zeige. Du guckst Nina Hagen an und siehst dass sie auf ein kleines rotes Haus zeigt. Du merkst dir beides. Du setzt dir eine Kappe der Marke "set_link" auf. Du gehst in das grüne Haus. Ende 1. Akt.
    2. Akt: Du suchst und findest Reinhold Messner, und verdrehst seine Hand so dass er nun auch, gleich wie Nina Hagen, auf das kleine gelde Haus zeigt. Du verlässt das grüne Haus wieder.
    Ich zeige nach wie vor auf das grüne Haus, Reinhold Messner zeigt aber auf das kleine rote Haus. Nina Hagen singt vor sich hin.
    Vorhang, Applaus, Ende.

    ---

    Bühnenstück: precursor = next_node;

    Du kommst zu mir, guckst garnicht was ich so macht, sondern guckst Nina Hagen an. Du siehst dass sie auf ein kleines rotes Haus zeigt, und verdrehst meine Hand so dass ich auch auf das kleine rote Haus zeige.
    Ich zeige jetzt auf das kleine rote Haus, Reinhold Messner zeigt aber immernoch dorthin wo immer er auch zu beginn des Stückes hingezeigt hat Haus. Nina Hagen tanzt.
    Vorhang, Buh-Rufe, Ende.

    Ok...Ich hab keine Ahnung wie lange es her ist dass ich SO gelacht habe 😃



  • Mist! Das "kleine gelde Haus" muss natürlich das kleine ROTE Haus sein. Hatte erst grün und gelb -- gelb dann aber auf rot geändert weil grün und gelb sich so ähnlich sind - farblich so wie sprachlich. Sch*** Tippfehler!



  • danke jetzt habe ich es verstanden!...sorry für die ausführliche erklärung...:( anscheinend sollte ich das programmieren an den nagel hängen.. 😞

    trotzdem danke nochmal für die erklärung!

    lg matti



  • Nu mal Kopf hoch, wenn du's nicht verstanden hättest hiess es 😉


Anmelden zum Antworten