leetcode 138 深拷贝链表,带随机指针

字数 125阅读 217

链表部分的最后一道题啦。祝大家新年快乐~祝我心想事成_
这道题抄的。就没看懂想干啥···大概就是先拷贝一份,咋拷贝呢,就是在每个点之后产生一个相同的点,然后给它的random部分赋值,然后将其拆分出来。

听起来还蛮简单的,不过我当时是没写出来···

不过还是抄了一份:

RandomListNode *copyRandomList(RandomListNode *head) {
    RandomListNode newHead, l1, l2;
    l1 = head; 
    // 节点后产生新节点   
    while(l1) {
        // 这一部分是经典的链表插入节点,new一个,新的后位指向旧的后位,
        // 旧的后位指向新节点,最后旧节点指向新的后位
        l2 = new RandomListNode(l1->val);
        l2->next = l1->next;
        l1->next = l2;
        l1 = l2->next;  //这一步也可以写为 l1=l1->next->next;
    }
    newHead = head;  //用一个新指针指向已经扩展后的链表
    // 给新节点的random部分赋值
    for(l1 = head; l1; l1 = l1->next->next) {
        if(l1->random)
            l1->next->random = l1->random->next;
    }
    // 拆分
    for(l1 = head; l1; l1 = l1->next) {
        l2 = l1->next;
        l1->next = l2->next;
        if(l2->next)
            l2->next = l2->next->next;
    }
    return newHead;
}

推荐阅读更多精彩内容