算法题:复杂链表的复制

来源:互联网 发布:四川省教师网络培训 编辑:程序博客网 时间:2024/05/23 20:02

题目

请实现函数 ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表,在复杂链表中,每个结点除了有一个m_pPext指针指向下一个结点外,还有一个 m_pSibling指向链表中的任意结点或者 NULL。
结点的 C++ 定义如下:

struct ComplexListNode{    int m_nValue;    ComplexListNode* m_pNext;    ComplexListNode* m_pSibling;};

代码

思想和书上差不多,自己写的。

ComplexListNode* Clone(ComplexListNode* pHead){    if (pHead == NULL)        return NULL;    ComplexListNode* pNode = pHead;    while (pNode != NULL)    {        ComplexListNode* pTmp = new(ComplexListNode);        pTmp->m_nValue = pNode->m_nValue;        pTmp->m_pNext = pNode->m_pNext;        pTmp->m_pSibling = NULL;        pNode->m_pNext = pTmp;        pNode = pTmp->m_pNext;    }    pNode = pHead;    while (pNode != NULL)    {        ComplexListNode* pTmp = pNode->m_pNext;        if (pNode->m_pSibling != NULL)            pTmp->m_pSibling = pNode->m_pSibling->m_pNext;        pNode = pTmp->m_pNext;    }    ComplexListNode* pResultHead = pHead->m_pNext;    pNode = pHead;    while (pNode->m_pNext != NULL)    {        ComplexListNode* pTmp = pNode->m_pNext;        pNode->m_pNext = pTmp->m_pNext;        pNode = pTmp;    }    return pResultHead;}
原创粉丝点击