我正在制作一个双重链接列表,它只存储一个数据类型(通用),我需要一个复制构造函数。我想我已经把它弄好但是当我使用我的教师给出的文件测试它时,它不是当我尝试调试它时,问题似乎是在链表类的构造函数中,我只是设置head = NULL。这是一个正确的构造函数
//this is the struct i am using
struct ListItem
{
T value;
ListItem<T> *next;
ListItem<T> *prev;
ListItem(T theVal)
{
this->value = theVal;
this->next = NULL;
this->prev = NULL;
}
};
template <class T>
List<T>::List()
{
head=NULL;
}
template <class T>
List<T>::List(const List<T>& otherList)
{
ListItem<T> *Headold=otherList.getHead();
if (Headold==NULL)
{
head=NULL; //if otherlist head is NULL,new list head=0
}
else
{
head=new ListItem<T>(Headold->value); //initializing head to the string value
//storing in temporary pointers
ListItem<T> *oldnode=Headold;
ListItem<T> *newnode=head;
while (temp->next!=NULL)
{
oldhead=oldhead->next;
//making new node every instance
newnode->next=new ListItem<T>(oldhead->next->value);
ListItem<T> *newnodenext=newnode->next;
newnodenext->prev=newnode; //setting the previous pointer of the new node
}
}
}
答案 0 :(得分:2)
你没有更新temp1,它始终指向Head。 这是修复。
while (temp->next!=NULL)
{
temp=temp->next;
//making new node every instance
temp1->next=new ListItem<T>(temp->next->value);
ListItem<T> *temp2=temp1->next;
temp2->prev=temp1; //setting the previous pointer of the new node
temp1 = temp2;
}