zoukankan      html  css  js  c++  java
  • LeetCode: Copy List with Random Pointer

    跟clone graph思路一样

     1 /**
     2  * Definition for singly-linked list with a random pointer.
     3  * struct RandomListNode {
     4  *     int label;
     5  *     RandomListNode *next, *random;
     6  *     RandomListNode(int x) : label(x), next(NULL), random(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     RandomListNode *copyRandomList(RandomListNode *head) {
    12         // IMPORTANT: Please reset any member data you declared, as
    13         // the same Solution instance will be reused for each test case.
    14         if (head == NULL) return NULL;
    15         map<RandomListNode*, RandomListNode*> S;
    16         RandomListNode *res = new RandomListNode(head->label);
    17         S[head] = res;
    18         queue<RandomListNode *> que;
    19         que.push(head);
    20         while (!que.empty()) {
    21             RandomListNode *top = que.front();
    22             que.pop();
    23             if (top->next) {
    24                 RandomListNode *next = new RandomListNode(top->next->label);
    25                 S[top->next] = next;
    26                 S[top]->next = next;
    27                 que.push(top->next);
    28             }
    29             if (top->random) {
    30                 RandomListNode *tmp = top->random;
    31                 if (S.count(tmp)) S[top]->random = S[tmp];
    32                 else {
    33                     RandomListNode *random = new RandomListNode(tmp->label);
    34                     S[tmp] = random;
    35                     S[top]->random = random;
    36                 }
    37             }
    38         }
    39         return res;
    40     }
    41 };

     C#

     1 /**
     2  * Definition for singly-linked list with a random pointer.
     3  * public class RandomListNode {
     4  *     public int label;
     5  *     public RandomListNode next, random;
     6  *     public RandomListNode(int x) { this.label = x; }
     7  * };
     8  */
     9 public class Solution {
    10     public RandomListNode CopyRandomList(RandomListNode head) {
    11         if (head == null) return null;
    12         Dictionary<RandomListNode, RandomListNode> S = new Dictionary<RandomListNode, RandomListNode>();
    13         RandomListNode ans = new RandomListNode(head.label);
    14         S.Add(head, ans);
    15         Queue<RandomListNode> que = new Queue<RandomListNode>();
    16         que.Enqueue(head);
    17         while (que.Count != 0) {
    18             RandomListNode peek = que.Peek();
    19             que.Dequeue();
    20             if (peek.next != null) {
    21                 RandomListNode next = new RandomListNode(peek.next.label);
    22                 if (S.ContainsKey(peek.next)) S[peek.next] = next;
    23                 else S.Add(peek.next, next);
    24                 S[peek].next = next;
    25                 que.Enqueue(peek.next);
    26             }
    27             if (peek.random != null) {
    28                 RandomListNode tmp = peek.random;
    29                 if (S.ContainsKey(tmp)) S[peek].random = S[tmp];
    30                 else {
    31                     RandomListNode random = new RandomListNode(tmp.label);
    32                     S[tmp] = random;
    33                     S[peek].random = random;
    34                 }
    35             }
    36         }
    37         return ans;
    38     }
    39 }
    View Code
  • 相关阅读:
    Leetcode OJ: Rotate List
    Leetcode OJ: Reverse Words in a String
    Effective C++读书笔记
    word改变下划线与文字的距离
    sql 取出表中不重复的值
    Iso文件用utrliso怎么安装
    Spring注入aspectJ切面
    Spring中利用java注解声明切面
    Spring面向切面编程
    spring中部分异常
  • 原文地址:https://www.cnblogs.com/yingzhongwen/p/3406043.html
Copyright © 2011-2022 走看看