我需要爲數據結構創建一個自定義的雙向鏈表。重複(自定義)雙向鏈表的第一個元素
但列表的第一個元素重複,我看不到我的錯誤。
這是我的push_back功能:
template <class DT>
void List<DT>::push_back(const DT& elem)
{
if(First->Back == nullptr && First->Forward == nullptr) {
First->Current = elem;
Last->Current = elem;
Last->Back = First;
First->Forward = Last;
return;
} else {
ListObject<DT> *temp = new ListObject<DT>(*Last);
Last = new ListObject<DT>(); Last->Back = temp; Last->Forward = nullptr; Last->Current = elem;
temp->Back->Forward = temp;
temp->Forward = Last;
}
}
主
List<int> c;
c.push_back(66);
c.push_back(44);
c.push_back(88);
c.push_back(58);
std::cout << "---------------------------" << std::endl;
for(ListObject<int> *a = c.First; a; a = a->Forward) {
std::cout << a->Current << std::endl;
}
編輯這裏是我的ListObject類
template <class LDT>
class ListObject {
public :
ListObject* Back;
LDT Current;
ListObject* Forward;
ListObject(const LDT& elem, ListObject& _back, ListObject& _forward) {
Back = &_back;
Current = elem;
Forward = &_forward;
}
ListObject() {
Back = nullptr;
Forward = nullptr;
}
ListObject(const ListObject& lista) {
Back = lista.Back;
Current = lista.Current;
Forward = lista.Forward;
}
~ListObject() {
delete Back;
delete Forward;
Current;
}
ListObject<LDT> MakeList(const LDT& elem, ListObject& _back, ListObject& _forward) {
return ListObject<LDT>::ListObject(elem, _back, _forward);
}
void assing(LDT elem) {
Current = elem;
}
bool HasForward() {
if(Forward != nullptr) {return true;} else{return false;}
}
};
爲什麼插入一個元素時在else子句中有兩個分配?你似乎泄漏了最後一個'Last'。 –