www.pudn.com > ProxyService.rar > LinkList.h


template 
class CNode 
{ 
public: 
	Type Data; 
	CNode *Prvs; 
	CNode *Next; 
}; 
 
template 
class CLinkList 
{ 
public: 
	CLinkList(); 
	~CLinkList(); 
	void MoveToBgn(); 
	void MoveToEnd(); 
	bool MoveToNext(); 
    void Insert(CNode *Node); 
	bool Remove(); 
	void Empty(); 
	CNode* GetNode(); 
	int  GetLength(); 
private: 
	CNode *Head; 
	CNode *Curt; 
}; 
 
template 
CLinkList::CLinkList() 
{ 
	Head = NULL; 
	Curt = Head; 
} 
 
template 
CLinkList::~CLinkList() 
{ 
	Empty(); 
} 
 
template 
void CLinkList::MoveToBgn() 
{ 
	Curt = Head; 
} 
 
template 
void CLinkList::MoveToEnd() 
{ 
	CNode *Temp = Head; 
	if(NULL == Temp) 
	{ 
		Curt = NULL; 
		return; 
	} 
 
	while(NULL != Temp->Next) 
	{ 
		Temp = Temp->Next; 
	} 
 
	Curt = Temp; 
} 
 
template 
bool CLinkList::MoveToNext() 
{ 
	if(NULL == Curt) 
	{ 
		return false; 
	} 
 
	if(NULL == Curt->Next) 
	{ 
		return false; 
	} 
	else 
	{ 
		Curt = Curt->Next; 
	} 
 
	return true; 
} 
 
template 
void CLinkList::Insert(CNode *Node) 
{ 
	if(NULL == Head) 
	{ 
		Head = Node; 
	} 
 
	if(NULL == Curt) 
	{ 
		Curt = Node; 
	} 
	else 
	{ 
		Node->Next = Curt->Next; 
		Node->Prvs = Curt; 
		Curt->Next = Node; 
		Curt = Curt->Next; 
	} 
} 
 
template 
bool CLinkList::Remove() 
{ 
	if(NULL == Curt) 
	{ 
		return false; 
	} 
	else 
	{ 
		if(NULL == Curt->Prvs) 
		{ 
			Head = Curt->Next; 
			if(NULL != Curt->Next) 
			{ 
				Curt->Next->Prvs = NULL; 
			} 
		} 
		else 
		{ 
			Curt->Prvs->Next = Curt->Next; 
			if(NULL != Curt->Next) 
			{ 
				Curt->Next->Prvs = Curt->Prvs; 
			} 
		} 
 
		delete Curt; 
		MoveToEnd(); 
	} 
 
	return true; 
} 
 
template 
void CLinkList::Empty() 
{ 
	CNode *Temp1 = Head; 
	CNode *Temp2 = Head; 
 
	while(NULL != Temp2) 
	{ 
		Temp2 = Temp1->Next; 
		delete Temp1; 
		Temp1 = Temp2; 
	} 
 
	Head = NULL; 
	Curt = NULL; 
} 
 
template  
CNode* CLinkList::GetNode() 
{ 
	return Curt; 
} 
 
template  
int CLinkList::GetLength() 
{ 
	int iLength = 0; 
 
	CNode *Temp = Head; 
	while(NULL != Temp) 
	{ 
		iLength++; 
		Temp = Temp->Next; 
	} 
 
	return iLength; 
}