0

私はしばらくこれに取り組んできましたが、リンクされたリストを正しく反復処理する方法がわかりません。現在、プログラムを実行できますが、リンクされたリストから結果が得られません。これは私のコードです。これまでのところ、何が起こるべきかです。ここに画像の説明を入力

これが私の結果です。ここに画像の説明を入力しかし、これもすぐにクラッシュします

#ifndef LList_h
#define LList_h

#include <iostream>
#include "node.h"

class LList
{
public:
    LList(void);            //constructor
    LList(const LList &);   //copy constructor
    ~LList();           //destructor

    LList *next;            //points to next node
    void push_back(const string &str);
    void push_front(const string &str);
    friend ostream& operator<<(ostream& out, const LList& llist);
    LList &operator=(const LList &l);       
private:
    Node *_head;
    Node *_tail;

    string _str;
};

inline LList::LList(void) {
    cerr << "head = tail = 0 at 0024f8d0\n";

    _head = 0;
    _tail = 0;
}

inline void LList::push_back(const string &_str) {
    Node *p = new Node(_str);
    if (_tail == 0) {
        _tail = p;
    } else {
        _tail ->next(p);
        _tail = p;
    }        
}

inline void LList::push_front(const string &_str) {
    Node *p = new Node(_str);

    if (_head == 0) {
        _head  = p;
    } else {
        _head ->next(p);
        _head = p;
    }
}

ostream &operator <<( ostream &out, const LList & llist ) {
    for( LList *p = llist.front; p != 0; p = p -> next )
        out << p;

    return out;
}

LList & LList::operator=(const LList &l) {
    _head = 0;
    _tail = 0;

    return *this;
}
#endif
4

2 に答える 2

0

関数は何をしNode::next(Node *p)ますか?の次のフィールドをthistoに設定する場合p、関数内のこのコードpush_frontはおそらく間違っています。

else
{
    _head ->next(p);
    _head = p;
}

代わりに:

  1. に設定p.next_headます。(head now follow p)
  2. に設定_headpます。(新しいヘッドはp)
于 2013-02-14T14:08:27.517 に答える