剑指offer:复杂链表复制

链表复制与随机指针处理
本文介绍了一种特殊的链表复制算法,该算法能在O(n)的时间复杂度内完成链表节点的复制及随机指针的正确赋值,并最终分离出完整的复制链表。

1.p  A->B->C->D->E=>A->A‘->B->B'->C->C'->D->D'->E->E'

2.找到A',B',C',D',E'的随机指针指向

3.将复制后的链表A' B' C' D' E'拆出来

public class Solution {
    public RandomListNode Clone(RandomListNode pHead)
    {   
        RandomListNode p=pHead;
        while(p!=null){   //两个p之间插一个q
            RandomListNode q=new RandomListNode(pHead.label);
            q.next=p.next;
            p.next=q;
            p=q.next;
        }
        RandomListNode qHead=pHead.next,q=null;
        q=qHead;
        p=pHead;
        while(q!=null){    //复制random指针
            q.random=p.random.next;
            q=q.next.next;
            p=p.next.next;
        }
        q=qHead;
        while(q!=null){         //拆除q链表
            q.next=q.next.next;
            q=q.next;
        }
        return qHead;
    }
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值