剑指offer第二十五题【复杂链表的复制】c++实现

复杂链表的复制
  • 参与人数:1297时间限制:1秒空间限制:32768K
  • 通过比例:17.22%
  • 最佳记录:0 ms|8552K(来自  LuLu1990

题目描述

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

将复制后的节点插入在原节点后面

然后就有node->random=old->random->next;

最后再拆分成两个链表

RandomListNode* Clone(RandomListNode* pHead)
{
    if(!pHead){
        return NULL;
    }
    RandomListNode *old;
    for(old=pHead;old;){
        RandomListNode * node=new RandomListNode(old->label);
        node->next=old->next;
        old->next=node;
        old=node->next;
    }
    for(old=pHead;old;){
        RandomListNode * node=old->next;
        if(old->random){
            node->random=old->random->next;
        }
        old=node->next;
    }
    RandomListNode *res =pHead->next;
    for(old=pHead;old;){
        RandomListNode * node=old->next;
        old->next=node->next;
        old=old->next;
        if(old){
            node->next=old->next;
        }
    }
    return res;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值