我正在尝试出于指令目的在C ++中实现Linked ArrayList,尽管遇到了麻烦,但是我不确定如何取消它。我的指针数组似乎不是由指针组成,而是由实际对象组成。
保持我的代码尽可能简短。
//arraylist.h//
class classArrayList {
private:
class Node {
Node();
//accessors
};
Node* classArray;
public:
classArrayList();
};
//arraylist.cpp//
classArrayList::classArrayList() {
Node* node = new Node();
this->setHead(node);
this->setMaxSize(5);
classArray = new Node[5];
this->classArray[0] = *node;
this->setSize(1);
}
void classArrayList::deleteNode( int index ) {
Node* my_current = &this->classArray[index];
//blahblah
}
但是,当我删除一个节点时,“ my_current”不会链接到此列表中的下一个或上一个。试图删除零位,没有下一个。
因此,肯定有一个带有数据的节点,但是它没有链接,但是检查调试器,我的链接列表很好并且可以正常工作,因此无论数组指向何方,都在搞砸。
因此,如何指向列表而不是指向唯一实例,该如何解决呢?
我向数组添加新内容的代码是:this-> classArray [some_index] = * new_node;
为了明确起见,我希望有一个数组可以顺序指向链接列表中的每个对象。然后,当我在arraylist中的任意n个位上求一个时,将其引用为一个指针,然后通过其在数组中的位置对列表中的对象进行精简,而不是在列表中递增直到找到我想要的第n个。
最佳答案
使您的classArray
为双指针,并创建一个Node
指针数组。 Node* classArray;
将列表开头的地址复制到每个数组。
classArray = new Node*[5];
在您的代码中,通过语句
this->classArray[0] = *node;
不会存储新创建的节点的地址,而是存储新创建的节点的内容。通过删除,您不会删除动态创建的列表头。要复制新创建的列表的地址,您应该使用
this->classArray[0] = node;