1

独自のリンク リスト クラスを作成していますが、このリストを走査するのに役立つ関数を作成する方法を理解するのに問題があります。リンクされたリストを最初から作成するのはこれが初めてなので、私のアプローチが慣習的でない場合は、より慣習的なものを教えてください.

getNext() という次の要素と getPrev(); という次の要素にインクリメントできるようにする関数を List クラス内に記述したいと思います。

getNext を次のように書きました。

T* getNext(){return next;}

ただし、 next がスコープ内で宣言されていないことがわかります。リスト内のオブジェクトにアクセスして変更できる関数も書きたいと思います。ブラケット演算子の使用を検討していましたが、まずデータ メンバーを返す関数を作成する必要があります。おそらく、ポップ機能で行ったのと同じようなアプローチをとったら..今考えてみます。ただし、引き続きアドバイスをいただければ幸いです。

ここに私のリストクラスがあります:

#ifndef LIST_H
#define LIST_H


//List Class
template <class T>
class List{
    struct Node {
        T data;
        Node *next;
        Node *prev;
        //Constructs Node Element
        Node(T t, Node* p, Node* n) { data = (t); prev = (p); next = (n); }
//      T *getNext() {return next;}
    };
        Node *head;
        Node *tail;
public: 
    //Constructor
    List() { head = NULL; tail=NULL; }
    //Destructor
    ~List() { 
        while(head){
            Node * temp(head);
            head = head->next;
            delete temp;
        }
    }
    //is empty
    bool empty() const {return (!head || !tail ); }
    operator bool() const {return !empty(); }
    //Push back
    void push_back(T data) {
        tail = new Node(data, tail, NULL);
        if(tail->prev) //if the node in front of tail is initilized
            tail->prev->next = tail;

        if( empty() )
            head = tail;
    }
    //Push front
    void push_front(T data) {
        head = new Node(data, NULL, head);
        if(head->next)//if the node following head is initilized
            head->next->prev = head;

        if( empty() )
         tail = head;
    };
    T pop_back() {
        if( empty() )
            throw("Error in List: List is empty\n");

        Node* temp(tail);
        T data(tail->data);
        tail = tail->prev;

        if( tail )
            tail->next = NULL;
        else
            head = NULL;

        delete temp;
        return data;
    }
    T pop_front() {
        if (empty())
            throw("Error in List: List is empty\n");

        Node* temp(head);
        T data(head->data);
        head = head->next;

        if(head)
            head->prev=NULL;
        else
            tail = NULL;

        delete temp;
        return data;
    }

    T getNext(){return next;}
};


#endif
4

3 に答える 3

0

それはNodestructのメンバーであり、 のメンバーであるためgetNextですList。type のオブジェクトからアクセスする必要がありますNode

于 2013-10-15T17:54:34.643 に答える