笨笨熊

复杂链表的复制

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

思路之一:
1、Map<Integer,RandomListNode> 存储新链表的节点
2、遍历旧链表,遍历的同时深度克隆每一个节点,并建立关系

import java.util.*;
public class Solution {
    public RandomListNode Clone(RandomListNode pHead){   
        if(pHead==null) return null;
        RandomListNode newNode =  null;
        RandomListNode retHead = null;
        Map<Integer,RandomListNode> nodeMap = new HashMap<>();
        boolean  isHead = true;
        while(pHead!=null){
            //克隆当前节点
            newNode =  cloneNode(pHead.label,nodeMap);
            if(pHead.random!=null){
                //克隆random指针节点
                newNode.random = cloneNode(pHead.random.label,nodeMap);
            }
            if(pHead.next!=null){
                //克隆next指针节点
                newNode.next = cloneNode(pHead.next.label,nodeMap);
            }
            if(isHead){
                //记录下头节点,返回结果用
                retHead = newNode;
                isHead = false;
            }

            pHead = pHead.next;
            newNode = newNode.next;
        }
        return retHead;
    }

    //克隆节点
    public RandomListNode cloneNode(int label,Map<Integer,RandomListNode> map){
         RandomListNode node = map.get(label);
        if(node==null){
            node = new RandomListNode(label);
            map.put(label,node);
        }
        return  node;
    }

}
全部评论

相关推荐

11-24 00:11
已编辑
广东工业大学 算法工程师
避雷深圳&nbsp;&nbsp;yidao,试用期&nbsp;6&nbsp;个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
10-05 11:11
海南大学 Java
投票
理想江南137:感觉挺真诚的 感觉可以试一试
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务