VerketteListe in C++

SID1982

Grünschnabel
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.

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
 
re,

falls es denn überhaupt jemanden interessiert, ich hab den Fehler eben selbst gefunden. :)
Es liegt nicht am löschen, sondern dummerweise an der Anzeige.

cu
 
Zurück