• 剑指offer[25]——复杂链表的复制


    题目描述

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

    要注意,这道题不是简单的二叉树复制,我们知道,二叉树是一直向下走的,不会往回走。但是题目的这个复杂链表不一样,他除了有一个next指针之外,还有一个random指针,这个指针可以指向复杂链表之前的任意一个节点,图示如下:

    所以说如果我们按照普通的二叉树复制的话,就可能陷入无限的循环当中。此时我们换一种思路,依次向每一个节点的下一个节点插入相同的节点,示意图如下:

    /*function RandomListNode(x){
        this.label = x;
        this.next = null;
        this.random = null;
    }*/
    function Clone(pHead)
    {
        if(!pHead){return null;}
        let _pHead = pHead;
        while(pHead){
            let temp = new RandomListNode(pHead.label);
            temp.next = pHead.next;
            pHead.next = temp;
            pHead = pHead.next.next;
        }
        pHead = _pHead;
        while(pHead){
            pHead.next.random = pHead.random?pHead.random.next:null;
            pHead = pHead.next.next;
        }
        let temp = _pHead.next;
        let res = temp;
        _pHead = _pHead.next.next;
        while(_pHead){
            temp.next = _pHead.next;
            _pHead = _pHead.next.next;
            temp = temp.next;
        }
        return res;
    }
    
  • 相关阅读:
    字符替换
    并发编程之线程创建
    禁止浏览器缓存文件
    Java垃圾回收机
    带你走进ajax
    MFC的CString使用
    《Java小游戏》:球球大作战
    【推荐】开源项目ElasticAmbari助力 ElasticSearch、Kibana、ambari服务高效运维管理
    Java基础
    什么是可串行化MVCC
  • 原文地址:https://www.cnblogs.com/Jacob98/p/12502434.html
Copyright © 2020-2023  润新知