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

      题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。

      复杂链表的结构如下:

    1 struct RandomListNode {
    2     int label;
    3     struct RandomListNode *next, *random;
    4     RandomListNode(int x) :
    5             label(x), next(NULL), random(NULL) {
    6     }
    7 };

      代码如下:

     1 RandomListNode* Clone(RandomListNode* pHead){
     2         if(!pHead) return NULL;
     3         RandomListNode *currNode = pHead;
     4         //复制原始链表的任意节点N并创建新节点N',并把N'连接到N的后面
     5         while(currNode){
     6             RandomListNode *node = new RandomListNode(currNode->label);
     7             node->next = currNode->next;
     8             currNode->next = node;
     9             currNode = node->next;
    10         }
    11         currNode = pHead;
    12         
    13         //如果原始链表上的节点N的random指向S,则它对应的复制节点N'的random指向S的下一个节点S'
    14         while(currNode){
    15             RandomListNode *node = currNode->next;
    16             if(currNode->random){               
    17                 node->random = currNode->random->next;
    18             }
    19             currNode = node->next;
    20         }
    21         //把第二步得到的链表拆分成两个链表,奇数位置上的节点组成原始链表,偶数位置上的节点组成复制出来的链表
    22         RandomListNode *pCloneHead = pHead->next;
    23         RandomListNode *tmp;
    24         currNode = pHead;
    25         while(currNode->next){
    26             tmp = currNode->next;
    27             currNode->next =tmp->next;
    28             currNode = tmp;
    29         }
    30         return pCloneHead;
    31 }
  • 相关阅读:
    Git 常用命令 Better
    HTTP Cookie 总结 Better
    clientWidth, offsetWidth, scrollWidth的区别 Better
    Math.round() 0.5时的特殊性 Better
    screenY、pageY、clientY、offsetY的区别 Better
    Oracle 数据快速导出工具:sqluldr2
    使用 barman的备份和归档PostgreSQL
    Android RK 内置应用 不可卸载
    AS SerialPort 编译依赖库
    RK 看门狗 WatchDog
  • 原文地址:https://www.cnblogs.com/yangrenzhi/p/5801768.html
Copyright © 2011-2022 走看看