Achteraan toevoegen in een gekoppelde lijst

Status
Niet open voor verdere reacties.

Myclos81

Gebruiker
Lid geworden
17 nov 2007
Berichten
157
Hallo,

mijn vraag is hoe ik bij onderstaande lijst het gecodeerd krijg dat ik via "staart" achteraan ook cijfers kan toevoegen? Via de kop werkt het maar via de staart niet, wat doe ik hier verkeerd ?

// Gunther Leijs
// Week 47 Oefening 2
// Zie boek p. 381 voorbeeld 12.9
//
// Pas het voorbeeld aan zodat de nodes ook achteraan kunnen
// worden toegevoegd. De koppeling moet slechts in één richting
// worden bijgehouden.

#include <iostream>
#include <string>
using namespace std;

class IntNode
{
private:
int x;
IntNode *p;
IntNode *q;
public:
// Constructor
IntNode(int n = 0, IntNode *volgende = NULL)
: x(n), p(volgende), q(volgende)
{
}

// Get-functies
int &getInt()
{
return x;
}

IntNode *&getVolgende()
{
return p;
}
};

class LijstIterator
{
private:
IntNode *wijzer;
public:
LijstIterator(IntNode *init = NULL)
: wijzer(init)
{
}
int &operator*()
{
return wijzer -> getInt();
}
LijstIterator &operator++()
{
wijzer = wijzer -> getVolgende();
return *this;
}
bool operator != (LijstIterator Liter)
{
return wijzer != Liter.wijzer;
}
};

class Lijst
{
private:
IntNode *kop;
IntNode *staart;
public:
// typedef
typedef LijstIterator iterator;

// constructor

Lijst()
: kop(NULL), staart(kop)
{
}

// destructor

~Lijst()
{
IntNode *wijzer = kop, *pVolgende;
while(wijzer != NULL)
{
pVolgende = wijzer -> getVolgende();
delete wijzer;
wijzer = pVolgende;
}
}
void voegtoekop(int x)
{
kop = new IntNode(x, kop);
}
void voegtoestaart(int x)
{
staart = new IntNode(x, staart);
}
iterator begin()
{
return iterator(kop);
}
iterator end()
{
return iterator();
}
};

int main()
{
Lijst lijst;
lijst.voegtoekop(1);
lijst.voegtoekop(2);
lijst.voegtoekop(3);
lijst.voegtoestaart(4);

Lijst::iterator pos, begin = lijst.begin(), einde = lijst.end();



for(pos = begin; pos != einde; ++pos)
{
cout << *pos << endl;
}

return 0;
}
 
Wel ik zie dat je voor kop en staart dezelfde InitNode constructor gebruikt. Terwijl dit ( bij normale code toch ) niet het geval zou zijn. Bij staart moet je altijd de pointer naar het vorige element zetten. ( Bij kop de pointer naar het volgende ).

Dus wat je zou moeten doen is. Een nieuwe InitNode aanmaken, dan staart zijn volgende element laten verwijzen naar deze nieuwe initNode, en dan staart gelijkstellen aan de nieuwe initNode.

Ik geloof dat gij gewoon zegt. staart is nieuwe initNode, met als volgende element de oude staart. Wat niet de bedoeling is.

Als het dat niet is dan zal ik je code nog een tegoei bekijken. Maar is er reden waarom je het jezelf zo achterlijk moeilijk maakt? ( sorry voor de uitdrukking, maar als ik een iterator klasse schrijf is hij toch net iets leesbaarder:D )
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan