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 };
  • 相关阅读:
    ubuntu18 任务栏调到底部
    十六, Oracle约束
    十五, 数据导出导入
    十四, 角色
    十三,权限
    十二, 系统默认参数
    十一,函数
    PL/SQL 九九乘法表
    十,事务和锁
    九, 表查询 三
  • 原文地址:https://www.cnblogs.com/vincently/p/4071991.html
Copyright © 2011-2022 走看看