题解 | #复杂链表的复制#

复杂链表的复制

http://www.nowcoder.com/practice/f836b2c43afc4b35ad6adc41ec941dba

java解
我的思路比较简单,把next指针和random指针分开来赋值,分别进行,第一步只看next指针,因为next指针串起来就可以把所有的节点都重新创建出来。第二部看random指针,那就再重头循环一遍整个链表,判断每个节点的random是否为空,不为空就找random的位置,再使用另外两个tempRe和newTempRe指针重头开始找位置,tempRe循环原来的pHead链表,newTempRe循环复制出来的newHead链表,当判断到tempRe == temp.random时说明找到了该位置,此时newTempRe指向的就是复制出来的newHead链表中的位置,这时只需要将newTempRe赋值给newTemp.random即可

public class Solution {
    public RandomListNode Clone(RandomListNode pHead) {
        if(pHead == null) return  null;
        RandomListNode newHead = new RandomListNode(pHead.label);
        RandomListNode newTemp = newHead;
        RandomListNode temp = pHead;
        while(temp.next != null){//将next指针复制完成,所有的节点也都复制完成。
            temp = temp.next;
            newTemp.next = new RandomListNode(temp.label);
            newTemp = newTemp.next;
        }
        newTemp = newHead;
        temp = pHead;

        RandomListNode newTempRe = null;
        RandomListNode tempRe = null;
        while(temp != null){
            if(temp.random != null){
                newTempRe = newHead;
                tempRe = pHead;
                while(tempRe != temp.random){
                    tempRe = tempRe.next;
                    newTempRe = newTempRe.next;
                }
                newTemp.random = newTempRe;
            }
            temp = temp.next;
            newTemp = newTemp.next;
        }

        return  newHead;
    }
}
全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务