LeetCode题解:Copy List with Random Pointer

来源:互联网 发布:100以内手指算法视频 编辑:程序博客网 时间:2024/05/21 13:57

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.

题意:给定一个链表包含一个随机的指针,指针可能指向链表中任意一个元素或者指向null,返回该list的深拷贝

思路:先复制链表中的节点,例如链表A-B-C就变成A-A-B-B-C-C,然后让复制的节点的next指向随机指针需要指向的节点,最后让原结点的随机指针指向复制结点的next对应的元素。

代码:

/** * 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) {        RandomListNode iter = head, next;        while(iter != null){            next = iter.next;            RandomListNode copy = new RandomListNode(iter.label);            iter.next = copy;            copy.next = next;            iter = next;        }        iter = head;        while(iter != null){            if(iter.random != null){                iter.next.random = iter.random.next;            }            iter = iter.next.next;        }        iter = head;        RandomListNode newHead = new RandomListNode(0);        RandomListNode copy, copyIter = newHead;        while(iter != null){            next = iter.next.next;            copy = iter.next;            copyIter.next = copy;            copyIter = copy;            iter.next = next;            iter = next;        }        return newHead.next;    }}
0 0