我正在嘗試爲雙鏈表中的節點編寫一個複製賦值運算符。但是,下面的代碼是給我一個堆棧溢出:雙鏈表節點運算符=
template <class DataType>
ListNode<DataType>& ListNode<DataType>::operator=(const ListNode<DataType>& Node)
{
if(this == &Node)
return *this;
else
{
if(Child != NULL)
delete Child;
if(Parent != NULL)
delete Parent;
if(Node.Child != NULL)
{
Child = new ListNode<DataType>();
*Child = *Node.Child;
}
else
Child = NULL;
if(Node.Parent != NULL)
{
Parent = new ListNode<DataType>();
*Parent = *Node.Parent;
}
else
Parent = NULL;
_data = Node._data;
}
return *this;
}
什麼是複製這樣一個節點的標準方式,我需要以使用其他手段(即不是一個拷貝賦值運算符)以做到這一點?我希望儘可能避免這樣做,因爲它會涉及重寫大量的現有程序。這個函數對於一個單獨的鏈表似乎工作得很好,但是通過添加父指針的拷貝,它似乎遇到了問題。我似乎無法確定爲什麼,或者想出一種替代方法來編寫此功能。
您可能想要創建一個'clear()'函數來刪除當前列表中的所有**節點。你的析構函數可以使用它,這個函數也是如此,當前你最多隻能刪除2個節點。 –
聞起來像遞歸:'* Child = * Node.Child;'。 –
是遞歸!你基本上是複製整個鏈表。不只是一個節點。 – 2013-04-12 20:08:52