遍历自定义列表

时间:2017-03-07 15:45:54

标签: c++ list c++11 const nodes

我已经在C ++中获得了一个类声明(用节点创建一个列表),我需要定义它,并且我遇到了一个成员函数问题:void print() const;

问题:如何在不删除函数声明中的const的情况下遍历并打印出first-gt;值,即先改变?下面的函数会产生错误:表达式必须是可修改的左值。

类声明(仅相关细节)

class List {
public:
     .
     .
     .
    void print() const;
    int size();
    void add(int d);

private:
    int sz = 0;

struct Node {
        int value;  
        Node* next; 
        Node(int v, Node* n) : value(v), next(n) {}
};

    Node* first; // pointer to the first node
};

类定义(仅相关细节)

void List::print() const {
    while (first != NULL) {
        cout << first->value << endl;
        first = first->next;
    }
}

int List::size() const {
    return sz;
}

void List::add(int d) {
    if (size == 0)
        first = new Node(d, NULL), sz++;
    else {
        Node* newnode = new Node(first->value, first->next);
        first = new Node(d, newnode);
        sz++;
    }
}

感谢您的时间

1 个答案:

答案 0 :(得分:0)

诀窍是复制first并仅修改副本:(未测试)

Node* firstCopy = first;
while (firstCopy != NULL) {
    cout << firstCopy->value << endl;
    firstCopy = firstCopy->next;
}