• 复杂链表的复制


    输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。

    一开始想这道题毫无思路,如果蛮来,首先创建好正常的链表,然后考虑sibling这个分量,则需要O(n^2)的时间复杂度,然后一个技巧便可以巧妙的解答此题。看图便知。

    首先是原始的链表

    绘图1

    然后我们还是首先复制每一个结点N为N*,不同的是我们将N*让在对应的N后面,即为

    绘图1

    然后我们要确定每一个N*的sibling分量,非常明显,N的sibling分量的next就是N*的sibling分量。

    最后,将整个链表拆分成原始链表和拷贝出的链表。

    这样,我们就解决了一个看似非常混乱和复杂的问题。

    PS:时刻注意判断要取的位置是否为NULL,->next 或 ->random。

     1 /*
     2 struct RandomListNode {
     3     int label;
     4     struct RandomListNode *next, *random;
     5     RandomListNode(int x) :
     6             label(x), next(NULL), random(NULL) {
     7     }
     8 };
     9 */
    10 class Solution {
    11 public:
    12     RandomListNode* Clone(RandomListNode* pHead)
    13     {
    14         if(pHead==NULL) return NULL;
    15         RandomListNode* ptmp=pHead;
    16         while(ptmp!=NULL){
    17             RandomListNode* p=new RandomListNode(ptmp->label);
    18             p->next=ptmp->next;
    19             ptmp->next=p;
    20             ptmp=p->next;
    21         }
    22         RandomListNode* r=pHead->next;
    23         ptmp=pHead;
    24         while(ptmp!=NULL){
    25             if(ptmp->random!=NULL)
    26                 r->random=ptmp->random->next;
    27             ptmp=r->next;
    28             r=ptmp->next;
    29         }
    30         ptmp=pHead;
    31         RandomListNode* res=pHead->next;
    32         ptmp->next=res->next;
    33         ptmp=res->next;
    34         r=res;
    35         while(ptmp!=NULL){
    36             r->next=ptmp->next;
    37             r=r->next;
    38             ptmp->next=r->next;
    39             ptmp=ptmp->next;
    40         }
    41         return res;
    42     }
    43 };
  • 相关阅读:
    python 文件读写操作(转抄)
    kubernetes之kubeadmin安装部署
    bash之字符串处理(核心重点)
    blocking and nonblocking
    文件格式转换
    解压.asar
    Cocos Creator Editor 编辑器扩展记录
    CocosCreator 警告:Please set node's active instead of rigidbody's enabled
    Unity 垂直翻转位图颜色数据
    CocosCreator 动态设置属性在Properties面板显示/隐藏
  • 原文地址:https://www.cnblogs.com/zl1991/p/4768228.html
Copyright © 2020-2023  润新知