我有一个作业需要我们实现一个双向链表类。出于某种原因,他们定义了节点struct
如下:
struct node {
node *next;
node *prev;
T *o;
};
在我看来,如果结构体成员“data”不是指针,编写该类会更加容易。无需多言,我不能改变它,所以我必须绕过它。我尝试按以下方式实现将元素添加到列表开头的方法:
template <typename T>
void Dlist<T>::insertFront(T *o) {
node *np = new node;
T val = *o;
np->o = &val;
np->prev = NULL;
np->next = first;
if (!isEmpty()) {
first->prev = np;
} else {
last = np;
}
first = np;
}
在使用ddd进行调试时,我意识到第一次插入数字时一切都正常,但第二次插入时一切都混乱了,因为一旦将“val”设置为新元素,它就会“覆盖”第一个元素,因为使用了val的内存地址。我尝试做其他事情,例如不仅仅有'val'变量,而是执行以下操作:
T *valp = new T;
T val;
valp = &val;
val = *o;
np->o = valp
这似乎也没有起作用。我认为这是因为它基本上只是我上面所做的更复杂的形式,只是多了一个内存泄漏 :)
有任何想法/指向正确方向的建议都将不胜感激。