相同元素的下一位位置实现定位!!

复杂链表的复制

http://www.nowcoder.com/questionTerminal/f836b2c43afc4b35ad6adc41ec941dba

如何定位random节点?

-- HashMap
---相同元素的下一个位置

三步走:

  1. 复制每个节点到相同节点的下一个位置:链表插入
  2. 复制随机指针:存在的话就是cur.random.next
  3. 拆分,返回head.next,核心过程:cur=cur.next.next
    大佬的图解:来源:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/solution/fu-za-lian-biao-de-fu-zhi-jian-dan-yi-dong-de-san-/
    图片说明
   /**
     * 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),
     * 请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
     * @param pHead 复杂链表
     * @return 并返回深拷贝后的头结点
     */
    public RandomListNode Clone(RandomListNode pHead)
    {
        if(pHead==null){
            return null;
        }
        RandomListNode cur=pHead;
        while (cur!=null){
            RandomListNode node=new RandomListNode(cur.label);
            node.next=cur.next;
            cur.next=node;
            cur=cur.next.next;//下一个原链接的节点。

        }
        cur=pHead;
        while (cur!=null&&cur.next!=null){
            cur.next.random=cur.random==null?null:cur.random.next;//式中在下一个位置!!!
            cur=cur.next.next;
        }
        RandomListNode head=pHead.next;
        RandomListNode curOldList=pHead;
        RandomListNode curNewList=head;
        while (curOldList!=null){
            curOldList.next=curOldList.next.next;
            curNewList.next=curNewList.next==null?null:curNewList.next.next;
            curOldList=curOldList.next;
            curNewList=curNewList.next;

        }

        return head;

    }
全部评论

相关推荐

点赞 评论 收藏
分享
CrazyBucket:我今天下午也做梦在招聘会上面试一家小厂,给自己气笑了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务