我应该创建一个双向链表。我还获得了一个测试链表函数的 CPP 文件(“test.cpp”文件)。我遇到的问题是 A)我不知道我的构造函数和析构函数应该做什么,并且 B)编译器不编译 test.cpp 文件,因为它有“除以零”错误,当当我的 List 构造函数将列表“head”初始化为 NULL 时,它正在编译它。
以下是链表中节点的代码:
template <class T>
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>
class List
{
ListItem<T> *head;
public:
// Constructor
List();
// Copy Constructor
List(const List<T>& otherList);
// Destructor
~List();
void insertAtHead(T item);
};
以下是我目前对构造函数、析构函数和 insertAtHead 函数(获得零错误除法的函数之一)的实现。
template <class T>
List<T>::List()
{
head->value=0;
}
template <class T>
List<T>::~List()
{
ListItem<T> *temp, *temp2;
temp=head;
if(head->next==NULL)
{
delete head;
}
else
{
while(temp->next!=NULL)
{
temp=temp->next;
temp2=temp->prev;
delete[] temp2;
}
delete [] temp;
delete [] head;
}
}
template <class T>
void List<T>::insertAtHead(T item)
{
ListItem<T>* a = new ListItem<T>(item);
if(head->next==NULL && head->value=0)
{
head=a;
}
else
{
head->prev=a;
a->next=head;
head=a;
}
}
最后,这是测试包含被零除的 insertAtHead 的函数。
void test_list_insert_head()
{
lasttotpoints = 5;
List<int> l;
for (int i = 0; i < 25000; i++)
{
l.insertAtHead(i);
ListItem<int> *tmp = l.getHead();
int k = i;
while (tmp != NULL)
{
if (tmp->value != k)
int a = 1/0;
k--;
tmp = tmp->next;
}
}
cout << ".";
lastpoints += 5;
}
为什么编译器之前没有注意到除以零,我的构造函数和析构函数到底应该做什么?谢谢。PS。我知道我已经发布了很多代码,但我现在有点绝望。任何帮助,将不胜感激!