25-复杂链表的复制-有不明白的地方

题目描述

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)

代码

  • 方法一:
    1. 递归思想:把大问题转换为若干小问题。
    2. 将复杂链表分为头结点和剩余结点两部分,剩余部分采用递归方法。
function RandomListNode(x){
    this.label = x;
    this.next = null;
    this.random = null;
}
function Clone(pHead)
{
    // write code here
    if(!pHead){
        return null;
    }
    let node = new RandomListNode(pHead.label);
    node.random = pHead.random;
    node.next = Clone(pHead.next);
    return node;
}
  • 方法二:


    思路
function RandomListNode(x) {
    this.label = x;
    this.next = null;
    this.random = null;
}

function Clone(pHead) {
    if (pHead === null) return;

    // 对应思路二中的第一步:
    var currNode = pHead;
    while (currNode !== null) {
        var node = new RandomListNode(currNode.label);
        node.next = currNode.next;
        currNode.next = node;
        currNode = node.next;
    }

    // 对应思路二中的第二步:
    currNode = pHead;
    while (currNode !== null && currNode.next !== null) {
        if (currNode.random) {
            currNode.next.random = currNode.random.next;
        }
        currNode = currNode.next.next;
    }

    //拆分,对应思路二中的第三步:        
    var pCloneHead = pHead.next;
    var tmp = null;
    currNode = pHead;
    while (currNode.next !== null) {
        tmp = currNode.next;
        currNode.next = tmp.next;
        currNode = tmp;
    }
    return pCloneHead;  //这一步不明白
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容