返回链表的元素

时间:2013-04-30 01:28:24

标签: c++ linked-list

请删除。

我想实现一个链表。不幸的是,我不确定自己是否走在正确的轨道上。

#include <iostream>
using namespace std;

class Node {
    friend class List;
public:
    int value;
private:
    Node *next;
};

class List {
public:
    List ();
    ~List ();
    Node * first() const;
    Node * next(const Node * n) const;
    void append (int i);

    Node* head;
};

List::List() {
    Node* head = new Node();
}

List::~List() {
    while(head != NULL) {
        Node * n = head->next;
        delete head;
        head = n;
    }
}

Node * List::first() const {
    return head; // this could also be wrong
}

Node * List::next(const Node * n) const {
    return n + 1; // ERROR
}

void List::append(int i) {
    Node * n = new Node;
    n->value = i;
    n->next = head;
    head = n;
}

int main(void) {
    List list;
    list.append(10);

    return 0;
}

当我尝试在next()中返回一个元素时,我收到此错误:

In member function ‘Node* List::next(const Node*) const’:|
error: invalid conversion from ‘const Node*’ to ‘Node*’ [-fpermissive]|

有人可以帮助我吗?

修改
我已经更新了错误行。

2 个答案:

答案 0 :(得分:2)

我认为你要做的是返回Node的下一个:

Node * List::next(const Node * n) const {
   return n->next;
}

如果这是一个每个对象大小不变的数组,你会使用指针算法,但是链表不能使用指针算法。如果你有一个迭代器,你可以使用'++'运算符来获取下一个对象,但是这只是坚持返回节点的下一个字段。

我认为这也会有效,因为即使将next声明为私有,你也让List成为朋友。

答案 1 :(得分:0)

您认为连续的节点在连续的内存块中,而不是。链接列表在内存中的随机位置有节点,这就是为什么&#34; next&#34;指向NEXT节点。您不能按照您的尝试增加或添加(您可以,但从语义上来说,这是不正确的。)