双向链表实现_c++

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值