2014-03-03 20 views
1

我对我的代码有麻烦。调用链表似乎没有得到“更新”的值或他们没有保存或什么的。可以使用一些帮助,谢谢。插入到链表的前面

template <class T> 
void LinkedList<T>::insert_front(const T& x) 
{ 
LinkedList* p = this; 
LinkedList* tmp = new LinkedList(x,p); 
p = tmp; 
cout<<p->m_data<<endl; 
cout<<tmp->m_data<<endl; 

调用函数是

//TEST : Inserting 10 numbers to a 
cout << endl << "TEST : Inserting 10 numbers to A" << endl; 
for (int k=0; k<10; k++){ 
A.insert_front(k+1); 
} 
cout << A << endl; 
cout << "Size of a = " << A.size() << endl; 

我得到的1122334455667788991010 输出,该输出tmp的数据值和P数据值每次调用 值去的代码,他们是正确的值,就在我去打印时没有显示任何东西只是一个空的列表。谢谢,我是新来的,但热爱社区。

+1

您的链接列表的概念是有缺陷的。链表有一个头*指针*,指向头*节点*。如果你写的是分配一个新的节点,让它指向下一个'this',然后立即泄漏该分配。最后,你有一堆泄漏的内存和一个头节点,它指向什么也没有开始:一个不确定的值和一个无用的下一个指针。 – WhozCraig

回答

1

您的链接列表和方法的设计是错误的。

在该方法中,您定义了局部变量p并将其分配给它tmp。退出该方法后,该局部变量将被销毁。所以没有发生与列表本身。它的数据成员都没有改变。还有一个内存泄漏。

template <class T> 
void LinkedList<T>::insert_front(const T& x) 
{ 
LinkedList* p = this; 
LinkedList* tmp = new LinkedList(x,p); 
p = tmp; 
cout<<p->m_data<<endl; 
cout<<tmp->m_data<<endl; 

你应该把你的课分成两个班。第一个将定义列表的节点,第二个将控制列表中的操作,并将列表的头部作为其数据成员。