zoukankan      html  css  js  c++  java
  • 【LeetCode练习题】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.

    题目意思:

    深拷贝一个给定的带random指针的链表,这个random指针可能会指向其他任意一个节点或者是为null。

    (又是链表啊啊啊啊啊啊啊!!!!!!!!Orz……)

    解题思路:

    在每个原来节点的后面插入一个新节点(label值一样),然后复制原来节点的random指针,最后包含新旧链表的长链表分成一个原来的链表和一个新的链表。

    参考这里面的两个图比较容易理解~……

    有一点需要注意:就是遇到链表的问题时,一定要考虑p是空指针时,不要出现p->next之类的调用,本题也是一样要考虑的。

    代码如下:

     1 class Solution {
     2 public:
     3     RandomListNode *copyRandomList(RandomListNode *head) {
     4         if(head == NULL)
     5             return NULL;
     6         RandomListNode *p = head;
     7         //第一遍:扫描顺序复制next指针
     8         while(p){
     9             RandomListNode *newNode = new RandomListNode(p->label);
    10             newNode->next = p->next;
    11             p->next = newNode;
    12             p = newNode->next;
    13         }
    14         p = head;
    15         //第二遍:复制random指针
    16         while(p){
    17             if(p->random)
    18                 p->next->random = p->random->next;
    19             p = p->next->next;
    20         }
    21         p = head;
    22         //第三遍:恢复旧链表和新链表
    23         RandomListNode *newHead = p->next;
    24         RandomListNode *newP = newHead;
    25         
    26         p->next = newP->next;
    27         p = p->next;
    28         //要保证p不是空指针,不然调用p->next就会报错。
    29         while(p){
    30             newP->next = p->next;
    31             newP = newP->next;
    32             p->next = newP->next;
    33             p = p->next;
    34         }
    35         return newHead;
    36     }
    37 };
  • 相关阅读:
    char与unsigned char的区别
    C语言 —— sprintf()函数
    char *s 与 char s[ ]的区别
    打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )
    洛谷P2242 公路维修问题(Road)
    洛谷P1209 [USACO1.3]修理牛棚 Barn Repair
    洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication
    洛谷P2246 SAC#1
    Bzoj4300 绝世好题
    Uva1398 Meteor
  • 原文地址:https://www.cnblogs.com/4everlove/p/3641652.html
Copyright © 2011-2022 走看看