zoukankan      html  css  js  c++  java
  • 剑指Offer——复杂链表的复制

    题目描述:

    输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)


    分析:

     复制链表的复制分为3个步骤:

    1. 复制链表的每个结点到它们的结点的后面,如A->B->C->D变成A->A->B->B->C->C->D->D。
    2. 将复制出来的链表的每个结点的random指针指向原链表的每个结点的random指针指向的下一个位置。
    3. 拆分链表,成为两个链表。


    代码:

     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         if(pHead == NULL) return NULL;
    14         RandomListNode* p = pHead;
    15         while(p) {  // 复制链表的每个结点接在相同结点的后面,如A->B->C->D变成A->A->B->B->C->C->D->D
    16             RandomListNode* pClone = new RandomListNode(p->label);
    17             pClone->next = p->next;
    18             p->next = pClone;
    19             p = pClone->next;
    20         }
    21         p = pHead;
    22         RandomListNode* pClone = pHead->next;
    23         while(p) {  // 使复制出来的结点的random指针,指向相应的位置
    24             if(p->random) pClone->random = p->random->next;
    25             p = pClone->next;
    26             if(p) pClone = p->next;
    27         }
    28         RandomListNode* head = pHead->next;
    29         p = pHead;
    30         pClone = head;
    31         while(p) {  // 拆分链表,成为一个新的链表,完成链表的复制
    32             p->next = pClone->next;
    33             p = pClone->next;
    34             if(p) {
    35                 pClone->next = p->next;
    36                 pClone = p->next;
    37             }
    38         }
    39         return head;
    40     }
    41 };
  • 相关阅读:
    1048. Find Coins (25)
    return view 详解 MVC
    EF Power Tool 代码生成器 反向生成
    对新数据库使用 Code First
    一个成熟的网站的架构设计应该是这样的
    公司业务的设计思想感悟
    请给奋斗中的男人们一次机会
    大话西游感悟
    充满恶意的单词
    lisp的解释器
  • 原文地址:https://www.cnblogs.com/jacen789/p/7747642.html
Copyright © 2011-2022 走看看