#include <iostream>
using namespace std;
template <typename T> class Node
{
public:
Node()
{
m_header=NULL;
m_pNext=NULL;
}
void CreateList(T newNodeCuntter);
int GetListSize();
void AddToTail( T newNodeCuntter);
void PrintAllNode();
void DeleteNode(int iat);
void InserterNode(T newNode,int iat);
private:
Node *m_header;
Node *m_pNext;
T m_node;
static int m_iNumOfNode;
};
template<typename T> int Node<T>::m_iNumOfNode=0;
template<typename T> int Node<T>::GetListSize()
{
return m_iNumOfNode;
}
template<typename T> void Node<T>::InserterNode( T newnode,int iat)
{
if (m_header==NULL || iat>m_iNumOfNode ||m_iNumOfNode<0)
{
cout <<"List donot exit or over range"<<endl;
return ;
}
Node* pCurrent=m_header;
//Node* pLast=NULL;
Node* pNewNode=NULL;
pNewNode=new Node;
pNewNode->m_header=m_header;
pNewNode->m_pNext=NULL;
pNewNode->m_node=newnode;
int i=0;
while (pCurrent->m_pNext)
{
if (i==iat)
{
pNewNode->m_pNext=pCurrent->m_pNext;
pCurrent->m_pNext=pNewNode;
return ;
}
pCurrent=pCurrent->m_pNext;
i++;
}
}
template<typename T> void Node<T>::CreateList( T newNode)
{
if (m_header==NULL)
{
m_header=new Node;
m_header->m_pNext=NULL;
m_header->m_node =newNode;
cout<<"AddToTail: "<<m_iNumOfNode++ <<"-"<< m_header->m_node <<endl;
}
}
template<typename T> void Node<T>::AddToTail(T newNodeCuntter)
{
if (m_header==NULL)
{
m_header=new Node;
m_header->m_node=newNodeCuntter;
m_header->m_pNext=NULL;
cout<<"AddToTail: "<<m_iNumOfNode++ <<"-"<< m_header->m_node <<endl;
}
else
{
Node* pheader=m_header;
while (pheader->m_pNext)
{
pheader=pheader->m_pNext;
}
Node* pNewAddNode=new Node;
pheader->m_pNext=pNewAddNode;
pNewAddNode->m_header=m_header;
pNewAddNode->m_pNext=NULL;
pNewAddNode->m_node=newNodeCuntter;
cout<<"AddToTail: "<<m_iNumOfNode++ <<"-"<< pNewAddNode->m_node <<endl;
}
}
template <typename T> void Node<T>::PrintAllNode()
{
if (m_header==NULL)
{
cout<<"print end"<<endl;
return;
}
else
{
int i=0;
Node * pHeader=m_header;
while(pHeader->m_pNext)
{
cout<<i++<<":"<<pHeader->m_node<<", ";
pHeader=pHeader->m_pNext;
}
cout<<i++<<":"<<pHeader->m_node<<" end ";
}
}
template <typename T> void Node<T>::DeleteNode(int iat)
{
if (m_header==NULL || iat >m_iNumOfNode || iat <0)
{
cout <<"m_iNumOfNode"<<m_iNumOfNode<<"List donot exit or over range"<<endl;
return ;
}
else
{
Node *pCutter=m_header;
Node *pLast=NULL;
int i=0;
static bool bat0=false;
while (pCutter->m_pNext /*&& i!=iat*/)
{
if (i==iat && i!=0)
{
cout <<endl;
cout<<"before delete"<<endl;
cout<<"last: "<<pLast->m_node<<" ";
cout<<"cutter: "<<pCutter->m_node<<" ";
cout<<"next: "<<pCutter->m_pNext->m_node;
pLast->m_pNext=pCutter->m_pNext;
cout<<"after delete"<<endl;
cout<<"last: "<<pLast->m_node<<" ";
cout<<"cutter: "<<pLast->m_pNext->m_node<<" ";
cout<<"next: "<<pCutter->m_pNext->m_pNext->m_node<<" ";
delete pCutter;
return;
}
else if (iat==0 )
{
if (!bat0)
{
m_header=pCutter->m_pNext;
delete pCutter;
bat0=true;
pCutter=m_header;
}
pCutter->m_pNext->m_header=pCutter->m_header;
}
pLast=pCutter;
pCutter=pCutter->m_pNext;
i++;
}
if (iat==m_iNumOfNode-1)
{
//pLast=pCutter;
pLast->m_pNext=NULL;
delete pCutter;
}
}
}
int main()
{
Node<int> headerNode;
headerNode.CreateList(0);
for(int i=1;i<11;i++)
{
headerNode.AddToTail(i);
}
headerNode.PrintAllNode();
headerNode.DeleteNode(10);
cout <<endl;
headerNode.PrintAllNode();
cout <<endl;
headerNode.InserterNode(41,4);
headerNode.PrintAllNode();
int aend;
cin>>aend;
return 0;
}
自己写的链表模板类
最新推荐文章于 2025-07-17 15:43:40 发布
