C++ Finde den Fehler: Doppelt verkettete Liste

DrunkenKilla

Ensign
Registriert
Aug. 2006
Beiträge
210
Moin,

wenn ich das Programm starte, läuft es in einer Endlosschleife und gibt nur einen Wert (den letzten) zurück. Wo ist der Fehler?

Code:
//
//  main.cpp
//  Aufgabe5
//
//  Created by du on 06.12.11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#include <iostream>

using namespace std;

struct ListElem{
private:
    ListElem* m_Next;
    ListElem* m_Prev;
    int m_Elem;
    
public:
    int getElem(){
        return m_Elem;
    }
    
    void setPrev(ListElem* elem){
        m_Prev = elem;
    }
    
    ListElem* getPrev(){
        return m_Prev;
    }
    
    void setNext(ListElem* next){
        m_Next = next;
    }
    
    ListElem* getNext(){
        return m_Next;
    }
    
    void setElem(int elem){
        m_Elem = elem;
    }
    
    ListElem(int elem, ListElem* next, ListElem* prev){
        m_Next = next;
        m_Prev = prev;
        m_Elem = elem;
        
        if(m_Next != 0)
            m_Next->setPrev(this);
        if (m_Prev != 0)
            m_Prev->setNext(this);
    }
};

struct DoubleList{
    ListElem* m_Head;
    ListElem* m_Tail;
    
    DoubleList(){
        m_Head = 0;
        m_Tail = 0;
    }
    
    void pushFront(int elem){
        if(m_Head == 0)
            m_Head = m_Tail = new ListElem(elem, 0, 0);
        else
            m_Head = new ListElem(elem, m_Head, 0);
    }
    
    void pushBack(int elem){
        if(m_Tail == 0)
            m_Tail = m_Head = new ListElem(elem, 0, 0);
        else
            m_Tail = new ListElem(elem, 0, m_Tail);
    }
    
    void addElement(int elem){
        m_Tail = m_Head;
        m_Head = new ListElem(elem, m_Head, 0);
    }
    
    void print(){
        for (ListElem* elem = m_Head; elem != 0; elem->getNext()) {
            cout << elem->getElem() << endl;
        }
    }
};

int main (int argc, const char * argv[])
{
    DoubleList dl;
    dl.addElement(5);
    dl.addElement(10);
    /*
    dl.pushFront(5);
    dl.pushBack(10);
    dl.pushFront(10);
    dl.pushFront(15);
    dl.pushFront(25);
    dl.pushFront(35);
     */
    dl.print();
    return 0;
}
 
ok hier die Lösung:

Code:
void print(){
        for (ListElem* elem = m_Head; elem != 0; elem = elem->getNext()) {
            cout << elem->getElem() << endl;
        }
    }
 
"next" wird auch als code-eigener Bezeichner verwendet, evtl. den Parameter anders nennen?

Und ansonsten evtl. die print-Funktion und deren Abbruchbedingung.
Statt elem->getNext()
elem=elem->getNext()?

edit: Oh shit, hatte ich das Fenster lange offen.
 
Zurück
Oben