moin moin,
also, das wird mein erster Beitrag in diesem Forum!
Es geht um folgendes Problem:
Ich habe in c++ eine verkettete Liste angelegt und möchte nun einen Knoten löschen.
Soweit so gut, es klappt auch. Allerdings kann ich den ersten Knoten nicht löschen, also dachte ich mir, ich füge einen pseudo Anfangs- und Endeknoten ein. Nur leider klappt das auch nicht wirklich, er findet zwar den Vorgänger vom 1 richtigen Knoten, also den pseudo Anfangsknoten, aber er hängt den Zeiger einfach nicht auf den 2 Knoten um.
Das Programm ist vielleicht etwas unübersichtlich, da ich den ganzen Code posten werden, aber ich hoffe mir kann trotzdem jemand helfen.
Außerdem sind ein paar Spielereien drinn, die eigentlich zu nix gut sind
achja, die Funktion "del" ist die zum löschen eines Knoten.
Wie gesagt, wäre super, wenn mir da jemand das Brett vorm Kopf wegnehmen würde
Danke schonmal
Mark
also, das wird mein erster Beitrag in diesem Forum!

Es geht um folgendes Problem:
Ich habe in c++ eine verkettete Liste angelegt und möchte nun einen Knoten löschen.
Soweit so gut, es klappt auch. Allerdings kann ich den ersten Knoten nicht löschen, also dachte ich mir, ich füge einen pseudo Anfangs- und Endeknoten ein. Nur leider klappt das auch nicht wirklich, er findet zwar den Vorgänger vom 1 richtigen Knoten, also den pseudo Anfangsknoten, aber er hängt den Zeiger einfach nicht auf den 2 Knoten um.
Das Programm ist vielleicht etwas unübersichtlich, da ich den ganzen Code posten werden, aber ich hoffe mir kann trotzdem jemand helfen.
Außerdem sind ein paar Spielereien drinn, die eigentlich zu nix gut sind

achja, die Funktion "del" ist die zum löschen eines Knoten.
Code:
#include <iostream>
using namespace std;
//#################################################################
struct node{
int key;
struct node *next;
};
//#################################################################
//#################################################################
void anzeigen( node *lauf, node &pa, node &pe, node &ele1 )
{
lauf=&ele1;
cout <<"\n\t";
while (lauf<&pe)
{
cout <<lauf->key<<" ";
lauf=lauf->next;
}
lauf=&pa;
cout << "\n\n\tPseudoAnfangsKnoten Key :"<<lauf->key;
cout << "\n\n\tNachfolger Key vom PAK :"<<lauf->next->key;
lauf=&pe;
cout << "\n\n\tPseudoEndeKnoten :"<<lauf->key;
lauf=&pa;
}
//#################################################################
void del( node *lauf, node &pa, node &pe, node &ele1){
int x;
cout << "\n\nwelchen knoten wollen sie loeschen?";
cin >> x;
lauf=&pa;
while(lauf->next->key!=x)
{
lauf=lauf->next;
}
cout << "\nVorgaenger des zu loeschenden Knoten:"<<lauf->key;
cout << "\n\n";
lauf->next=lauf->next->next;
//anzeigen(lauf, pa, ele1);
}
//#################################################################
void einfuegen(node *lauf, node &pe, node &pa)
{
int e;
struct node *add;
cout << "\n\nwelchen key wollen sie einfuegen?";
cin >> e;
lauf=&pa;
while (lauf->next->key<e && lauf->next!=&pe)
{
lauf=lauf->next;
}
cout << "\nVorgaenger des zu einzufuegenden Knoten:"<<lauf->key;
cout << "\n\n";
add = new node;
add->key=e;
add->next=lauf->next;
lauf->next=add;
}
//##################################################################################
void anhang(node *lauf, node &pa, node &pe)
{
int a;
struct node *add;
lauf = &pa;
cout << "\n\tBitte den Key des neuen Knotens eingeben:";
cin >> a;
while(lauf->next!=&pe)
{
lauf=lauf->next;
}
cout <<"\n\tDer letzte Knoten hat den Key: ";
cout << "\n\t"<<lauf->next->key; //Dient nur zur Kontrolle,
cout << "\n\t"<<pe.key; //ob wirklich das ende der Liste gefunden wurde.
add = new node;
add->key=a;
add->next=lauf->next;
lauf->next=add;
}
//##################################################################################
void main(){
int eingabe;
struct node pa, pe, ele1, ele2, ele3, ele4, ele5, *kopf, *ende, *lauf;
//#################################################################
kopf=&pa;
pa.next=&ele1;
ele1.next=&ele2;
ele2.next=&ele3;
ele3.next=&ele4;
ele4.next=&ele5;
ele5.next=&pe;
ende=&pe;
//#################################################################
lauf=&ele1;
//#################################################################
ele1.key=1;
ele2.key=2;
ele3.key=3;
ele4.key=4;
ele5.key=5;
//#################################################################
while(eingabe!=5)
{
cout << "\n\n\tWas möchten Sie als nächstes tun?";
cout << "\n\t1. Loeschen eines Knoten nach dem Key";
cout << "\n\t2. Einfuegen eines Knoten nach dem Key";
cout << "\n\t3. Anhaengen eines Knoten an die Liste";
cout << "\n\t4. Anzeigen der Liste";
cout << "\n\t5. Beenden";
cout << "\n\t";
cin >> eingabe;
switch (eingabe)
{
case 1: del(lauf, pa, pe, ele1); break;
case 2: einfuegen(lauf, pe, ele1); break;
case 3: anhang(lauf, pa, pe); break;
case 4: anzeigen(lauf, pa, pe, ele1 ); break;
}
}
//#################################################################
}
Wie gesagt, wäre super, wenn mir da jemand das Brett vorm Kopf wegnehmen würde

Danke schonmal
Mark