【leetcode】Copy List with Random Pointer (hard)

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.

Return a deep copy of the list.

思路:

做过,先复制一遍指针,再复制random位置,再拆分两个链表。

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;

// Definition for singly-linked list with a random pointer.
struct RandomListNode {
    int label;
    RandomListNode *next, *random;
    RandomListNode(int x) : label(x), next(NULL), random(NULL) {}
};

class Solution {
public:
    RandomListNode *copyRandomList(RandomListNode *head) {
        if(head == NULL) return NULL;

        RandomListNode * p = head;

        //在每个结点后面复制一个自己 不管random指针
        while(p != NULL)
        {
            RandomListNode * cpy = new RandomListNode(p->label);
            cpy->next = p->next;
            p->next = cpy;

            p = cpy->next;
        }

        //复制random指针
        p = head;
        while(p != NULL)
        {
            RandomListNode * cpy = p->next;
            if(p->random != NULL)
            {
                cpy->random = p->random->next;
            }

            p = cpy->next;
        }

        //把原链表与复制链表拆开
        RandomListNode * cpyhead = head->next;
        p = head;
        RandomListNode * cpy = cpyhead;
        while(p != NULL)
        {
            p->next = cpy->next;
            cpy->next = (cpy->next == NULL) ? cpy->next : cpy->next->next;

            p = p->next;
            cpy = cpy->next;
        }

        return cpyhead;
    }
};

int main()
{
    RandomListNode * r = new RandomListNode(-1);
    Solution s;
    RandomListNode * ans = s.copyRandomList(r);

    return 0;
}
时间: 2024-10-09 03:26:03

【leetcode】Copy List with Random Pointer (hard)的相关文章

【LeetCode】Copy List with Random Pointer

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 思路:第一遍正常复制链表,同时用哈希表保存链表中原始节点和新节点的对应关系,第二遍遍历链表的时候,再复制随机域. 这是一种典型的空间换时间的做法,n个节点,需要大小为O(n

【LeetCode】Copy List with Random Pointer 解题报告

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. /** * Definition for singly-linked list with a random pointer. * class RandomListNode

leetcode -day8 Copy List with Random Pointer &amp; Single Number I II

五一中间断了几天,开始继续... 1.  Copy List with Random Pointer A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 分析:剑指offer上的一道题目,分三步进行,首先复制每个链表结点

[LeetCode][JavaScript]Copy List with Random Pointer

Copy List with Random Pointer A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. https://leetcode.com/problems/copy-list-with-random-poin

Java for LeetCode 138 Copy List with Random Pointer

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 解题思路: 我们在Java for LeetCode 133 Clone Graph题中做过图的复制,本题和图的复制十分类似,JAVA实现如下: public Random

Leetcode 138. Copy List with random pointer

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 思路:deep copy的意思就是克隆.扫两遍原来的list,第一遍copy node和next.然后再扫第二遍,这是如果pointer.random非空,我们就可以在co

leetCode(7):Copy list with random pointer

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. /** * Definition for singly-linked list with a random pointer. * struct RandomListNode

leetcode 138. Copy List with Random Pointer ----- java

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 和第133题差不多,都是图的复制,区别在于这道题的label有可能是相同的,所以导致了map的key有可能相同,所以需要处理. 两种方法差不多.第二种更简洁. 1.在复制n

LeetCode – Refresh – Copy List with Random Pointer

Two methods for doing this problem: 1. With extra memory, using hashtable: I made a mistake for mapping[runner->random] = mapping[runner]->random. Then it will erase original one and not correctly copied. 1 /** 2 * Definition for singly-linked list