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

复杂链表的复制

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;
    }
}
全部评论

相关推荐

兄弟们,实习都是在接各种api,该怎么包装简历
仁者伍敌:感觉我自己做小项目也是各种api啊,我要怎么包装简历
点赞 评论 收藏
分享
醉蟀:你不干有的是人干
点赞 评论 收藏
分享
能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务