www.pudn.com > ProxyService.rar > LinkList.h
templateclass 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; }