zoukankan      html  css  js  c++  java
  • [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.

    思路:首先将原链表复制一个新节点并连接到所复制的节点后面,然后在这样的链表上链接复制节点的random指针。最后分拆链表

       时间复杂度O(n),空间复杂度O(1)

     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         if (head == NULL) return head;
    13         
    14         //复制节点
    15         for (RandomListNode *curr = head; curr != NULL;) {
    16             RandomListNode *pter = new RandomListNode(curr->label);
    17             pter->next = curr->next;
    18             curr->next = pter;
    19             curr = pter->next;
    20         }
    21         
    22         //链接random指针
    23         for(RandomListNode *curr = head; curr != NULL;) {
    24             if (curr->random != NULL) {
    25                 curr->next->random = curr->random->next;
    26             }
    27             curr = curr->next->next;
    28         }
    29         
    30         //分拆链表
    31         RandomListNode *new_head = head->next;
    32         for (RandomListNode *curr = head, **new_curr = &new_head; curr != NULL;) {
    33             *new_curr = curr->next;
    34             curr->next = curr->next->next;
    35             
    36             curr = curr->next;
    37             
    38             new_curr = &((*new_curr)->next);
    39         }
    40         
    41         return new_head;
    42     }
    43 };
  • 相关阅读:
    BAT脚本编写要点(1)_特殊字符
    开源爬虫软件汇总
    使用Gradle发布项目到JCenter仓库
    解决Android中,禁止ScrollView内的控件改变之后自动滚动
    理解RESTful架构
    一种为 Apk 动态写入信息的方案
    Proguard配置注解
    使用statsvn统计svn中的代码量
    android如何释放图片缓存
    Git命令参考手册(文本版)
  • 原文地址:https://www.cnblogs.com/vincently/p/4071991.html
Copyright © 2011-2022 走看看