复杂链表的复制

来源:互联网 发布:禁忌搜索算法ppt 编辑:程序博客网 时间:2024/06/04 19:56

题目描述

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。

思路:

1、复制原链表

2、从原链表表头开始,查询每个节点的random指针指向,同时移动复制链表的指针,当找到时,移动的指针次数是一样的,

则复制链表的random指针为移动的指针

/*public class RandomListNode {    int label;    RandomListNode next = null;    RandomListNode random = null;    RandomListNode(int label) {        this.label = label;    }}*/public class Solution {    public RandomListNode Clone(RandomListNode pHead)    {        if(null == pHead){            return null;        }else{            RandomListNode temp1 = pHead;            RandomListNode head = null;            RandomListNode tail = null;            RandomListNode temp = null;            while(temp1!=null){                if(head == null){                   head = new RandomListNode(temp1.label);                   tail = head;                }else{                    temp = new RandomListNode(temp1.label);                    tail.next = temp;                    tail = temp;                }                                temp1 = temp1.next;            }                        temp1 = pHead;            RandomListNode temp2 = pHead;                        temp = head;            RandomListNode temp0 = head;                        while(temp2!=null){                while(temp2.random != temp1){                    temp1 = temp1.next;                    temp0 = temp0.next;                }                                temp.random = temp0;                                temp2 = temp2.next;                temp = temp.next;                                temp1 = pHead;                temp0 = head;            }                        return head;                    }    }}


0 0
原创粉丝点击