leetcode 之Copy List with Random Pointer(23)

深拷贝一个链表,不同的是这个链表有个额外的随机指针。参考:http://blog.csdn.net/ljiabin/article/details/39054999

做法非常的巧妙,分成三步,一是新建结点,并放在旧结点之后;二是修改新结点的random指针;三是将新旧链表断开。

RandomListNode *randomList(RandomListNode *head)
      {
          //复制每个结点,并将新结点放在旧结点之后
          for (RandomListNode *cur = head; cur != nullptr;)
          {
              RandomListNode *node = new RandomListNode(cur->label);
              node->next = cur->next;
              cur->next = node;
              cur = node->next;
          }

          //修改新结点的Random指针
          for (RandomListNode *cur = head; cur != nullptr;)
          {
              if (cur->random != nullptr)cur->next->random = cur->random->next;

              cur = cur->next->next;
          }

          //将新旧链表断开
          RandomListNode dummy(-1);
          for (RandomListNode *cur = head,*new_cur=&dummy; cur != nullptr;)
          {
              new_cur->next = cur->next;
              new_cur = new_cur->next;

              cur->next = cur->next->next;
              cur = cur->next;

          }

          return dummy.next;
      }

时间: 2024-10-10 18:10:10

leetcode 之Copy List with Random Pointer(23)的相关文章

【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 -day8 Copy List with Random Pointer & 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

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 【 Copy List with Random Pointer 】 python 实现

题目: 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. 代码:Runtime: 215 ms 1 # Definition for singly-linked list with a random pointer. 2

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(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】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> #incl

【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 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