//仅供参考,希望不要用来应付老师布置的作业
#include
#include
typedef int DataType;
//单向链表
//节点类
class CNode
{
public:
CNode * m_pNext;
DataType m_Data;
//Constructor
CNode(): m_pNext(NULL){}
CNode(DataType x):m_pNext(NULL),m_Data(x){}
};
//链表类
class list
{
public:
list()
{
m_pHeader=NULL;
m_NodeSum=0;
}
CNode* MoveTrail(CNode *pNode) //移动到尾节点
{
CNode *pTmp=m_pHeader;
for(int i=1;i {
pTmp=pTmp->m_pNext;
}
return pTmp;
}
void AddNode(CNode *pNode) //添加节点
{
if(0==m_NodeSum)
{
m_pHeader=pNode;
}
else
{
CNode *pTrail=MoveTrail(pNode);
pTrail->m_pNext=pNode;
}
m_NodeSum++;
}
void AddNode(DataType x){ //重载的添加节点的函数
CNode* p=new CNode(x);
AddNode(p);
}
void PassList() //遍历链表(打印)
{
if(m_NodeSum>0)
{
CNode *pTmp=m_pHeader;
cout<m_Data;
for(int i=1;i {
pTmp=pTmp->m_pNext;
cout<m_Data;
}
}
cout< }
~list() //定义链表的析构函数
{
if(m_NodeSum>0)
{
CNode *pDelete=m_pHeader;
CNode *pTmp=NULL;
for(int i=1;i {
pTmp=pDelete->m_pNext;
delete pDelete;
pDelete=pTmp;
}
m_NodeSum=0;
pDelete=NULL;
pTmp=NULL;
}
m_pHeader=NULL;
}
CNode * getHeader(){ //获取链表头指针
return m_pHeader;
}
int getLength() //获取链表长度
{
return m_NodeSum;
}
//链表的数据成员
private:
CNode *m_pHeader;
int m_NodeSum;
};
#define N 10
int main()
{
list list0;
//创建初始链表
for(int i=0;i {
CNode *pNode=new CNode();
pNode->m_Data=i;
list0. AddNode(pNode);
}
//list0.PassList();
list l_even, l_odd;
CNode *p = list0.getHeader();
//遍历原始链表,把值为偶数的节点复制到l_even, 值为奇数的节点复制到l_odd。原链表不变
while(p!=NULL)
{
int x = p->m_Data;
if(x%2 !=0) //值为奇数的节点
{
l_odd.AddNode(x);
}else{ //值为偶数的节点
l_even.AddNode(x);
}
p=p->m_pNext;
}
//打印结果
list0.PassList();
l_even.PassList();
l_odd.PassList();
return 0;
}