利用HashMap保存一种映射关系

138. Copy List with Random Pointer

建立映射+遍历原来的链表获取关系

public class Solution {
    public RandomListNode copyRandomList(RandomListNode head) {
        HashMap<RandomListNode,RandomListNode> map = new HashMap<RandomListNode,RandomListNode>();
        RandomListNode p = head;
        //copy all the nodes
        while(p != null){
            RandomListNode newNode = new RandomListNode(p.label);
            map.put(p,newNode);
            p = p.next;
        }
        //Go over again and connect each nodes!
        p = head;
        while(p != null){
            map.get(p).next = map.get(p.next);
            map.get(p).random = map.get(p.random);
            p = p.next;
        }
        return map.get(head);
    }
}

133. Clone Graph

同样是建立原来的Node和新的Node之间的映射 然后我们遍历原来的Node 建立新的结点 + 建立邻居关系不同于链表的这里要进行图的遍历 下面就是BFS/DFS的内容了

BFS:

public class Solution {
    public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
        if(node == null)return null;
        UndirectedGraphNode copy = new UndirectedGraphNode(node.label);
        HashMap<UndirectedGraphNode,UndirectedGraphNode> map = new HashMap<UndirectedGraphNode,UndirectedGraphNode>();
        map.put(node,copy);
        Queue<UndirectedGraphNode> q = new LinkedList<UndirectedGraphNode>();
        q.offer(node);
        while(!q.isEmpty()){
            UndirectedGraphNode cur = q.poll();
            for(UndirectedGraphNode i: cur.neighbors){
                if(!map.containsKey(i)){
                    UndirectedGraphNode newNode = new UndirectedGraphNode(i.label);
                    map.put(i,newNode);
                    q.offer(i);
                }
                map.get(cur).neighbors.add(map.get(i));
            }
        }
        return copy;
    }
}

DFS: 想象这个函数返回的就是该点的结果 运用到邻居节点上 注意函数什么时候返回

public class Solution {
    public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
        HashMap<UndirectedGraphNode,UndirectedGraphNode> map = new HashMap<UndirectedGraphNode,UndirectedGraphNode>();
        return dfs(node,map);
    }
    public UndirectedGraphNode dfs(UndirectedGraphNode node,HashMap<UndirectedGraphNode,UndirectedGraphNode> map){
        if(node == null)return null;
        else if(map.containsKey(node)){
            return map.get(node);
        }
        else
        {
            UndirectedGraphNode newNode = new UndirectedGraphNode(node.label);
            map.put(node,newNode);
            for(UndirectedGraphNode neighbor: node.neighbors){
                newNode.neighbors.add(dfs(neighbor,map));
            }
            return newNode;
        }
    }
}

results matching ""

    No results matching ""