首页 > 其他 > 详细

复杂链表的复制

时间:2014-06-20 20:01:13      阅读:381      评论:0      收藏:0      [点我收藏+]

题目:实现ComplexLinNode* Clone(ComplexLinNode*pHead),复制一个复杂链表。

分析:必须先pnext后才能进行m_AnyNode

struct ComplexLinNode{
    char m_data;
    ComplexLinNode* m_NextNode;
    ComplexLinNode* m_AnyNode;
};
//1.将要复制的链表连接到链表后面
void CloneNode(ComplexLinNode* pNode)
{
    if (pNode == NULL)
        return;
    while (pNode!=NULL)
    {
        ComplexLinNode *pCloneNode = new ComplexLinNode;
        pCloneNode->m_data = pNode->m_data;
        pCloneNode->m_NextNode = pNode->m_NextNode;
        pNode->m_NextNode = pCloneNode;
        pCloneNode->m_AnyNode = NULL;

        pNode = pCloneNode->m_NextNode;   
    }
}
//2.将链表的m_AnyNode进行复制
void CopyAnyNode(ComplexLinNode* pNode)
{
    if (pNode == NULL)
        return;
    ComplexLinNode * pCloneNode=NULL;
    while (pNode->m_AnyNode!=NULL)
    {
        pCloneNode = pNode->m_NextNode;
        pCloneNode->m_AnyNode = pNode->m_AnyNode->m_NextNode;

        pNode = pNode->m_NextNode;       //记得别忘了
    }
}
//3.从链表中剥离复制的链表
ComplexLinNode* CopyComplexNode(ComplexLinNode*pNode)
{
    if (pNode == NULL)
        return;
    ComplexLinNode *CopyHead = NULL;
    CopyHead = pNode->m_NextNode;   //先初始化复制的头结点
    pNode = pNode->m_NextNode;        //主要是为了跟踪整个链表的结点
    while (pNode!=NULL)
    {
        CopyHead->m_NextNode = pNode->m_NextNode->m_NextNode;    //选择奇数结点作为copy的结点
        pNode = pNode->m_NextNode;
    }
    return CopyHead;
}
//将上面三步合起来
ComplexLinNode* Clone(ComplexLinNode*pHead)
{
    CloneNode(pHead);
    CopyAnyNode(pHead);
    return CopyComplexNode(pHead);
}

 

复杂链表的复制,布布扣,bubuko.com

复杂链表的复制

原文:http://www.cnblogs.com/menghuizuotian/p/3796196.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!