复杂链表的复制(结点包含随机指针)

来源:互联网 发布:2016年中国老龄化数据 编辑:程序博客网 时间:2024/06/05 17:19

题目描述

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。

思路:

1、在原链表上面复制,新节点连到相同的老结点后面;

2、复制随机指针,老结点的随机指针(老结点后面的结点的随机指针指向,老结点随机指针所指节点的下一个结点)

3、将两个链表分离,返回头指针;

代码如下:

    RandomListNode* Clone(RandomListNode* pHead){        if(pHead == NULL)return NULL;        RandomListNode* currNode = pHead;        while(currNode){            RandomListNode* node = new RandomListNode(currNode->label);            node->next = currNode->next;            currNode->next = node;            currNode = node->next;        }        currNode = pHead;        while(currNode){            RandomListNode* node = currNode->next;            if(currNode->random){                node->random = currNode->random;            }            currNode = node->next;        }        RandomListNode* pHead_Clone = pHead->next;        RandomListNode* p;        currNode = pHead;        while(currNode->next){            p = currNode->next;            currNode->next = p->next;            currNode = p;        }        return pHead_Clone;             }


0 0
原创粉丝点击