复杂链表的复制

来源:互联网 发布:销量预测模型 python 编辑:程序博客网 时间:2024/05/19 18:43

题目描述

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)

思路:分三步 。 1.复制该链表的每一个结点到对应每个结点的后面。 2,将每个结点上的random结点复制给刚刚复制的结点,记住是random.next,3.拆分链表.

代码如下:

/*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(pHead == null)return pHead;        RandomListNode currentNode = pHead;        //先将该链表上的每一个结点都复制到每个结点的后面        while(currentNode != null){            RandomListNode node = new RandomListNode(currentNode.label);                    node.next = currentNode.next;//先将以前的结点的next复制到重新复制的next上                    currentNode.next = node;//以前的结点和复制的结点连接起来                    currentNode = node.next;//然后指向复制的结点        }        //复制随机的random        currentNode = pHead;        while(currentNode != null){             RandomListNode node = currentNode.next;             if(currentNode.random != null){                node.random = currentNode.random.next;             }             currentNode = node.next;        }        //拆分复杂链表        RandomListNode pp = pHead.next;        RandomListNode tmp = null;        currentNode = pHead;        //这里的循环是将第一个结点与第三个结点相连,第二个结点与第四个结点相连        while(currentNode.next != null){             tmp = currentNode.next;             currentNode.next = tmp.next;             currentNode = tmp;        }          return pp;    }}


0 0
原创粉丝点击