复制链接列表堆栈类的构造函数:我正在向后复制

时间:2015-04-18 04:34:23

标签: c++ linked-list stack copy-constructor deep-copy

所以我已经梳理了这个网站上关于链表堆栈的内容。我是一个模板类,我也创建了一个Node结构。从我在其他问题中看到的情况来看,我理解考虑到C ++中已经存在的标准库实现,这并不总是最好的as mentioned in this first answer但这是一个赋值所以它都是科学名称。

这是结构,因此您可以了解我所命名的内容

template <class T>
struct Node
{ public:
  //data members
  T data;
  Node<T> *next;

  //methods
  Node(const T &);
};


template <class T>
Node<T>::Node(const T &newData)
{
data = newData;
next = NULL;
}

没什么特别的。 这些是我的Stack类的数据成员以供参考

private:
  Node<T> *stkTop;  //or headPtr, so to speak
  int stkSize;

这是我的复制构造函数

template <class T>
Stack<T>::Stack(const Stack<T> &existStack)
{

Node<T> *currentNode = existStack.stkTop;
stkSize = 0;
stkTop = NULL;

while( currentNode != NULL )
{
Node<T> *ptr = new Node<T>(0);

ptr -> data = (currentNode -> data);
ptr -> next = stkTop;
stkTop = ptr;

currentNode = currentNode -> next;

stkSize++;
}

到目前为止一直很好...... 我甚至遵守三法则。我也有一个重载的赋值运算符和析构函数(虽然说实话,赋值运算符是完全相同的代码,我只是包含了一个自我赋值的测试)。

我的意思是,它有作品。所有的价值都出现了...只是按相反的顺序...完全难倒。

实现程序我刚刚运行了几个简短的测试,比如显式调用构造函数,将堆栈分配给另一个堆栈,为自己分配一个堆栈。除了订单,一切看起来都很好。我假设我正在遍历我的列表错误或复制值的东西....我不知道:(

1 个答案:

答案 0 :(得分:0)

当你上升这个堆栈时,你正在向下堆栈(堆栈顶部到堆栈底部)existsStack with currentNode。您插入的第一个项目应该是顶部,而是您插入的最后一个节点是顶部。