main
int main() {
LinkList<int>* a = new LinkList<int>();
for (int i = 1; i < 100; ++i)
{
a->Add(i);
}
for (int i = 0; i < a->Size(); ++i) {
cout << a->Get(i) << endl;
}
delete a; //在这显示:已引发异常
a = nullptr;
}
Link
template <class T>
struct Link {
T data;
struct Link* next;
struct Link* last;
};
LinkList
template <class T>
LinkList<T>::LinkList() {
head = new Link<T>();
head->next = head;
head->last = head;
count = 0;
}
template <class T>
LinkList<T>::~LinkList() {
while (head != nullptr) {
Link<T>* link = head->next;
delete head;
head = link;
}
}
template <class T>
bool LinkList<T>::IsEmpty() const {
return count == 0;
}
template <class T>
int LinkList<T>::Size() const {
return count;
}
template <class T>
T& LinkList<T>::Get(const int index) const {
Link<T>* link = head;
for (int i =0; i<=index; ++i)
{
link = link->next;
}
return link->data;
}
template <class T>
int LinkList<T>::IndexOf(const T& element) const {
Link<T>* link = head;
for (int i =0; i < count ; ++i)
{
link = link->next;
if ( link->data == element )
{
return i;
}
}
link = nullptr;
return -1;
}
template <class T>
void LinkList<T>::Erase(const int index) {
Link<T>* link = head;
for (int i =0; i < index; ++i)
{
link = link->next;
}
link->next->last = link->last;
link->last->next = link->next;
count--;
link = nullptr;
}
template <class T>
void LinkList<T>::Add(const T& elememt) {
Link<T>* link = new Link<T>();
link->data = elememt;
link->next = head;
link->last = head->last;
head->last->next = link;
head->last = link;
link = nullptr;
count++;
}
template <class T>
void LinkList<T>::Insert(const int index, const T& element) {
Link<T>* link = head;
for (int i =0; i < index; ++i)
{
link = link->next;
}
Link<T>* tmp = new Link<T>();
tmp->data = element;
tmp->next = link;
tmp->last = link->last;
link->last->next = tmp;
link->last = tmp;
count++;
}