0

Please delete.

I want to implement a linked list. Unfortunately I'm not sure whether I'm on the right track.

#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;
}

When I try to return an element in next() I get this error:

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

Could somebody please help me?

EDIT:
I've updated the error-line.

4

2 回答 2

2

我认为你的意思是返回节点的下一个:

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

如果这是一个数组,其中每个对象的大小都是恒定的,那么您将使用指针算术,但链表不能使用指针算术。如果你有一个迭代器,你可以使用 '++' 运算符来获取下一个对象,但这只是坚持返回节点的下一个字段。

我假设这也会起作用,因为即使 next 被声明为私有,您也已将 List 设为朋友。

于 2013-04-30T01:41:21.353 回答
0

您认为连续节点位于连续的内存块中,但它们不是。链表在内存中的随机位置有节点,这就是为什么“next”指向 NEXT 节点的原因。您不能在尝试时增加或添加(当然可以,但从语义上讲这是不正确的。)

于 2013-04-30T01:38:03.030 回答