zoukankan      html  css  js  c++  java
  • 复杂链表的复制

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 

    题目描述

    输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
     
    思路:
      1、复制每个节点,并将复制节点A得到的A1,插入到A的后面
      2、遍历链表,找随机指针的指向(A1->random = A->random->next)
      3、将原链表与复制链表进行拆分(temp = A->next;A->next = temp->next;A = temp,循环指向此句直到A->next为空)
    图示例:


     代码如下:

    /*
    struct RandomListNode {
        int label;
        struct RandomListNode *next, *random;
        RandomListNode(int x) :
                label(x), next(NULL), random(NULL) {
        }
    };
    */
    class Solution {
    public:
        RandomListNode* Clone(RandomListNode* pHead)
        {
            if(pHead == NULL)
                return NULL;
            //复制每个节点
            RandomListNode* currNode = pHead;
            while(currNode)
            {
                RandomListNode* node = new RandomListNode(currNode->label);
                node->next = currNode->next;
                currNode->next = node;
                currNode = node->next;
            }
            //找随机指针的指向
            currNode= pHead;
            while(currNode)
            {
                RandomListNode *node = currNode->next;
                if(currNode->random)
                {
                    node->random = currNode->random->next;
                }
                currNode = node->next;
            }
            //拆分
            RandomListNode *pCloneHead = pHead->next;
            RandomListNode *temp; 
            currNode = pHead;
            while(currNode->next)
            {
                temp = currNode->next;
                currNode->next = temp->next;
                currNode = temp;
            }
            return pCloneHead;
        }
    };
  • 相关阅读:
    CDN 机制
    canvas绘制旋转图形
    前端资源网站
    css中的em用法
    响应式网页设计【转载】
    闭包与非闭包
    跨域文档之间的访问
    ajax跨域之---服务器端代理实现
    jsonp跨域实现
    freemarker 命名空间
  • 原文地址:https://www.cnblogs.com/whiteBear/p/12561965.html
Copyright © 2011-2022 走看看