请删除。
我想实现一个链表。不幸的是,我不确定自己是否走在正确的轨道上。
#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]|
有人可以帮助我吗?
修改
我已经更新了错误行。
答案 0 :(得分:2)
我认为你要做的是返回Node的下一个:
Node * List::next(const Node * n) const {
return n->next;
}
如果这是一个每个对象大小不变的数组,你会使用指针算法,但是链表不能使用指针算法。如果你有一个迭代器,你可以使用'++'运算符来获取下一个对象,但是这只是坚持返回节点的下一个字段。
我认为这也会有效,因为即使将next声明为私有,你也让List成为朋友。
答案 1 :(得分:0)
您认为连续的节点在连续的内存块中,而不是。链接列表在内存中的随机位置有节点,这就是为什么&#34; next&#34;指向NEXT节点。您不能按照您的尝试增加或添加(您可以,但从语义上来说,这是不正确的。)