#include <iostream>
using namespace std;
template<class T> class List;
template<class T> class ListNode{
friend class List<T>;
ListNode(const T& t):key(t),prev(0),next(0){}
T key;
ListNode<T> *prev;
ListNode<T> *next;
};
template<class T> class List{
public:
List():head(0){}
~List()
{
ListNode<T> *pt = head;
while (pt != 0)
{
ListNode<T> *node = pt;
pt = pt->next;
delete(node);
}
}
ListNode<T>* Search(const T& key) const;
bool Insert(const T& value);
bool Delete(const T& value);
void Print();
private:
ListNode<T> *head;
};
template<class T>
ListNode<T>* List<T>::Search(const T& key) const
{
ListNode<T> *pt = head;
while (pt != 0 && pt->key != key)
{
pt = pt->next;
}
return pt;
}
template<class T>
bool List<T>::Insert(const T& value)
{
ListNode<T> *node = new ListNode<T>(value);
node->next = head;
if (head != 0)
{
head->prev = node;
}
head = node;
node->prev = 0;
return true;
}
template<class T>
bool List<T>::Delete(const T& value)
{
ListNode<T> *delete_node = Search(value);
if (delete_node == 0)
{
return false;
}
if (delete_node->prev != 0)
{
delete_node->prev->next = delete_node->next;
}
else
{
head = delete_node->next;
}
if (delete_node->next != 0)
{
delete_node->next->prev = delete_node->prev;
}
return true;
}
template<class T>
void List<T>::Print()
{
ListNode<T> *pt = head;
while (pt != 0)
{
cout<<pt->key<<' ';
pt = pt->next;
}
cout<<endl;
}
int main()
{
List<int> ilist;
ilist.Insert(5);
ilist.Insert(10);
ilist.Insert(2);
ilist.Insert(3);
ilist.Print();
ilist.Delete(10);
ilist.Print();
system("pause");
return 0;
}
双向链表实现_c++
最新推荐文章于 2023-03-30 23:50:15 发布