Copy List with Random Pointer

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.

Return a deep copy of the list.

注意 判断下一个是不是空

  1. 遍历原list 每一个node,并把它连在当前node 后面

  2. 原node后面copy出来node的random就指向原node random的后一个

    1. cur.next.random = (cur.random == null ) null : cur.random.next;

  3. 把链表插为两个

    1. head != null

    2. cur.next = (cur.next != null) cur.next.next : null

/**
 * Definition for singly-linked list with a random pointer.
 * class RandomListNode {
 *     int label;
 *     RandomListNode next, random;
 *     RandomListNode(int x) { this.label = x; }
 * };
 */
public class Solution {
    public RandomListNode copyRandomList(RandomListNode head) {
        if(head == null)
            return null;
        
        RandomListNode cur = head;
        
        while(cur != null){
            RandomListNode node = new RandomListNode(cur.label);
            
            node.next = cur.next;
            cur.next = node;
            
            cur = node.next;
            //cur = cur.next.next;
        }
        
        
        cur = head;
        
        while(cur != null){
             cur.next.random =  (cur.random != null ) ? cur.random.next :null;
             cur = cur.next.next;
        }
        
        
        
        
        RandomListNode newHead = head.next;
        
        cur = newHead;
        
        while(head != null){
            head.next = head.next.next;
            
            cur.next = (cur.next != null) ? cur.next.next : null;
        
            head = head.next;
        
            cur= cur.next;
        }
        
        return newHead;
       
        
    }
}

Last updated