求一个数据结构(C++)的程序,将链表中的奇数项和偶数项分开存到两个新的链表中,原链表不变

链表采用类来实现class list{..........}; PS :符合要求者重赏

//仅供参考,希望不要用来应付老师布置的作业

#include<iostream.h>
#include<iomanip.h>

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<m_NodeSum;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<<setw(5)<<pTmp->m_Data;
            for(int i=1;i<m_NodeSum;i++)
            {
                pTmp=pTmp->m_pNext;
                cout<<setw(5)<<pTmp->m_Data;
            }
        }
        cout<<endl;
    }
    ~list() //定义链表的析构函数
    {
        if(m_NodeSum>0)
        {
            CNode *pDelete=m_pHeader;
            CNode *pTmp=NULL;
            for(int i=1;i<m_NodeSum;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<N;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;
}

温馨提示:答案为网友推荐,仅供参考
相似回答