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

复杂链表的复制

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

class RandomListNode {
    label: number
    next: RandomListNode | null
    random: RandomListNode | null
    constructor(label?: number, next?: RandomListNode | null, random?: RandomListNode | null) {
        this.label = (label===undefined ? 0 : label)
        this.next = (next===undefined ? null : next)
        this.random = (random===undefined ? null : random)
    }
}
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param pHead RandomListNode类 
 * @return RandomListNode类
 */
export function Clone(pHead: RandomListNode): RandomListNode {
    // write code here
//     const nodeMap = new Map();
//     let p = pHead;
//     while(p) {
//         const newNode = new RandomListNode(p.label);
//         nodeMap.set(p, newNode);
//         p = p.next;
//     }
    
//     p = pHead;
//     let start1 = new RandomListNode(0);
//     let start2 = start1;
//     while(p) {
//         const node = nodeMap.get(p);
//         const nextNode = nodeMap.get(p.next);
//         const randomNode = nodeMap.get(p.random);
//         start1 = node;
//         if(nextNode) {
//             start1.next = nextNode;
//         }
//         if(randomNode) {
//             start1.random = randomNode;
//         }
//         p = p.next;
//         start1 = start1.next;
//     }
//     return nodeMap.get(pHead);
    // =======================================================
    if(!pHead) return null;
    const dummy = new RandomListNode(0);
    dummy.next = pHead;
    while(pHead) {
        const copyNode = new RandomListNode(pHead.label);
        copyNode.next = pHead.next;
        pHead.next = copyNode;
        pHead = pHead.next.next;
    }
    let p2 = dummy.next;
    while(p2) {
        if(p2.random) {
            p2.next.random = p2.random.next;
        }
        p2 = p2.next.next;
    }
    let p3 = dummy.next, randomHead = p3.next;
    while(p3) {
        const cloneNode = p3.next;
        p3.next = p3.next? p3.next.next:null;
        p3 = cloneNode;
    }
    return randomHead;
}
全部评论

相关推荐

昨天 10:50
已编辑
门头沟学院 Java
鼠鼠华子无线实习,bg双九,通软岗位,论文,专利,竞赛都水过一点,秋招《非all in》选手,《泡池子泡到肿》选手,分享一下自己的时间线,给大家多一个参考。---实习末期,接口人电话沟通,最终决定求稳继续投递实习原部门---免机试,九月走完线下流程,开始入池---十月起开始保温,打听手中已拿offer,比较薪资,给出华子的预估职级和薪资(完全不给A的空间)---十月第二次保温,询问签约情况,各种暗示劝说留空白三方---十月底签约另一家公司,遂被降低优先级---十一月若干次常规保温信息(还有机会/稍晚一点/等这周。。。)---十二月告知部门有13的指标,愿意接受可以立刻发offer(难绷,妄图性...
蓦然回首一枝花:能体会楼主的心情,我投了华为无线的成研所,双9bg,被华子最后开了个13级的侮辱价 12.3打oc电话的时候接口人表示乐观等待就行,然后中间4周就开始不回消息或者拖四五天才回,翻来覆去就是“等审批结果”。 12月27号,我看应该是泡不出来了所以联系了部门流转,这时候接口人开始主动给我打电话告诉我马上就能出结果了,于是我也没继续流转。 12.31给我打电话说得降薪审批,薪资大概就是对应着13级的样子,但我当时因为投的是成都的,没有意识到薪资是按照上海开的,还以为这个薪资在成都是14级,加上那个时候我也“孝”劲上来了,想着能收我就行,于是答应了。 1.13开了出来,联系我了薪资,确认了下发现是13级,当时实在是接受不了,于是最终还是拒了。 拒的时候接口人告诉我说这个hc真的是他们争取了很久才争取到的,不过我一想到我12.3就打了oc电话,中间4周一直不搭理我或吊着我,最后12.31才告诉我争取不下来14级要降薪,也许争取真的要争取那么久吧,呵。 这个过程中也为华为拒了不少offer,大厂的、央企的、银行的都拒过,网上总说“华为没有发小奖状之前hr的话一个字都不要信”,当时没有放在心上,以为不会摊到我头上,现在来看当时也挺年轻气盛的。我感觉要不是中途我一直在烦hr,可能我就和楼主一样被泡死了吧,不过最后给开了个13级也和泡死没差,不过是被多侮辱了一次。 最后借楼主这个贴就只想跟后面的人提一个建议吧,还是那句说烂了的,“华为没有发小奖状之前hr的话一个字都不要信”,真的不要以为这样的情况不会出现在自己身上,不要拿自己的一辈子前途去送华为hr业绩。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务