138. Copy List with Random Pointer

138. Copy List with Random Pointer

题目

给定一个链表,每个结点包含一个额外的随机指针,可以指向列表中的任意结点或者指向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 fastNode = head;
        while(fastNode != null){
            RandomListNode insert = new RandomListNode(fastNode.label);
            insert.next = fastNode.next;
            fastNode.next = insert;

                fastNode = fastNode.next.next;//无需再添加判别

        }
        fastNode = head;
        while(fastNode != null){
            if(fastNode.random != null){
                fastNode.next.random = fastNode.random.next;
            }
            fastNode = fastNode.next.next;
        }
        fastNode = head;
        RandomListNode newHead = head.next;
        while(fastNode != null){
            RandomListNode newNode = fastNode.next;
            fastNode.next = newNode.next;
            if(newNode.next != null){//注意是next
                newNode.next = newNode.next.next; 
            }
            fastNode = fastNode.next;
        }
        return newHead;
    }
}

代码分析

这道题第一次看到跳过去了,完全没有思路。经过张同学的讲解,才理清了思路。
第一步:复制链表结点;
第二步:复制随机Random指针;
第三步:进行拆分。
注意二三步的判别条件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章