leetcode(十一)Copy List with Random Pointer

来源:互联网 发布:sha1rsa 是什么算法 编辑:程序博客网 时间:2024/06/06 20:17

copyright:leetcode

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.


/** * 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;//duplicateRandomListNode dhead = new RandomListNode(head.label);RandomListNode pd = dhead, ph = head;//assignment of nextfor(;ph != null;ph = ph.next){if(ph.next != null){pd.next = new RandomListNode(ph.next.label);pd = pd.next;}else{pd.next = null;}//System.out.println("!!!");//}//assignment of random, all members already in the ph listpd = dhead; ph = head;for(;pd != null;pd = pd.next, ph = ph.next){if(ph.random != null){pd.random = findRandom(dhead, ph.random);}else{pd.random = null;}//System.out.println("$$$");//}return dhead;    }private RandomListNode findRandom(RandomListNode dhead, RandomListNode target){RandomListNode p = dhead;for(;p != null;p = p.next){//System.out.println("###");//if(target.label == p.label)return p;}return null;}}

原理:1.先不管random,通过建立next建立单向链表dhead,之后random指向的节点肯定在dhead中,查找连接即可。



0 0
原创粉丝点击