zoukankan      html  css  js  c++  java
  • 面试题26 复杂链表的复制

    题目描述

    输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。
     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     void CloneNodes(RandomListNode *pHead){
    13         RandomListNode *pNode = pHead;
    14         while (pNode != NULL){
    15             RandomListNode *pClone = new RandomListNode(pNode->label);
    16             pClone->next = pNode->next;
    17             pClone->random = NULL;
    18             pNode->next = pClone;
    19             pNode = pClone->next;
    20         }
    21     }
    22     
    23     void ConnectRandomNodes(RandomListNode *pHead){
    24         RandomListNode *pNode = pHead;
    25         while (pNode != NULL){
    26             RandomListNode *pClone = pNode->next;
    27             if (pNode->random != NULL){
    28                 pClone->random = pNode->random->next;
    29             }
    30             pNode = pClone->next;
    31         }
    32     }
    33     
    34     RandomListNode* ReconnectNodes(RandomListNode *pHead){
    35         RandomListNode *pNode = pHead;
    36         RandomListNode *pCloneHead = NULL;
    37         RandomListNode *pCloneNode = NULL;
    38         
    39         if (pNode != NULL){
    40             pCloneHead = pCloneNode = pNode->next;
    41             pNode->next = pCloneHead->next;
    42             pNode = pNode->next;
    43         }
    44         
    45         while (pNode != NULL){
    46             pCloneNode->next = pNode->next;
    47             pCloneNode = pCloneNode->next;
    48             pNode->next = pCloneNode->next;
    49             pNode = pNode->next;
    50         }
    51         return pCloneHead;
    52     }
    53     
    54     
    55     RandomListNode* Clone(RandomListNode* pHead)
    56     {
    57         CloneNodes(pHead);
    58         ConnectRandomNodes(pHead);
    59         return ReconnectNodes(pHead);
    60     }
    61 };
  • 相关阅读:
    [CentOS7] 安装sogou输入法
    [CentOS7] vncviewer与windows之间的复制粘贴
    linux solr7.2+tomcat8 详细部署整合
    linux solr 安装
    linux dubbo-admin-2.6.0 环境搭建
    linux tomcat安装
    linux jdk安装
    linux Nginx-1.10.2 安装部署教程
    linux技巧---创建应用快捷方式
    linux MySQL 5.7+keepalived 主备服务器自主切换
  • 原文地址:https://www.cnblogs.com/wanderingzj/p/5357262.html
Copyright © 2011-2022 走看看