1. 程式人生 > 其它 >力扣題目-複雜連結串列的複製

力扣題目-複雜連結串列的複製

基本思路

基本思路就是將新複製的連結串列的位置和舊連結串列的位置進行一一對應,這樣的話就可以確定舊連結串列的random指向的位置了。
第一次遍歷就是複製一遍新的連結串列,同時使用map將舊連結串列的該位置的Node和新連結串列的該位置的Node進行對應
第二次遍歷就是遍歷新舊連結串列,通過舊連結串列對應位置的Node獲得新連結串列的Node,賦值即可。

程式碼


/*
// Definition for a Node.
class Node {
    int val;
    Node next;
    Node random;

    public Node(int val) {
        this.val = val;
        this.next = null;
        this.random = null;
    }
}
*/
class Solution {
    public Node copyRandomList(Node head) {
        Node index = head,newNode = new Node(-1),newIndex = newNode;
        HashMap<Node,Node> map = new HashMap<>();
        while(index != null){
            Node temp = new Node(index.val);
            map.put(index,temp);
            newIndex.next = temp;
            newIndex = newIndex.next;
            index = index.next;
        }
        index = head;
        newIndex = newNode.next;
        while(index != null){
            if(index.random != null){
                newIndex.random = map.get(index.random);
            }else{
                newIndex.random = null;
            }
            newIndex = newIndex.next;
            index = index.next;
        }
        return newNode.next;
    }
}