2014-03-03 60 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; 

你應該把你的課分成兩個班。第一個將定義列表的節點,第二個將控制列表中的操作,並將列表的頭部作爲其數據成員。