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

    一、题目

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

    二、解法

     1 public class Solution {
     2     //递归
     3     /*public RandomListNode Clone(RandomListNode pHead)
     4     {
     5         if(pHead == null) return null;
     6             RandomListNode newHead = new RandomListNode(pHead.label);
     7             newHead.random = pHead.random;
     8             newHead.next = Clone(pHead.next);
     9             return newHead;
    10     }*/
    11     
    12     public RandomListNode Clone(RandomListNode pHead){
    13          if(pHead == null)
    14              return null;
    15          RandomListNode pCur = pHead;
    16          //1、复制原结点的next,如原来是A->B->C 变为 A->A'->B->B'->C->C'
    17          while(pCur != null){
    18              RandomListNode node = new RandomListNode(pCur.label);
    19              node.next = pCur.next;//将node的next指向pCUr的next  A'->B  A->B
    20              pCur.next = node;//将pCur.next指向node A->A'->B
    21              pCur = node.next;//将pCur指向node.next 下次辅助B
    22          }
    23          pCur = pHead;//将pCur指向pHead
    24          //2、复制random指针,  pCur是原来链表的结点,pCur.next是复制pCur的结点
    25          while(pCur != null){
    26              if(pCur.random != null)//如果pCur.random不为空
    27                 //将pCur的random指针的next就是pCur.next的random指针指向的结点
    28                  pCur.next.random = pCur.random.next;
    29              pCur = pCur.next.next;//移动pCur指针
    30          }
    31          //新建一个head结点,指向pHead的next结点,即指向拆分链表的头结点
    32          RandomListNode head = pHead.next;
    33          //新建一个cur结点,指向拆分链表的head头结点
    34          RandomListNode cur = head;
    35          //将pCur指向头结点
    36          pCur = pHead;
    37          //3、拆分链表
    38          while(pCur != null){
    39              pCur.next = pCur.next.next;
    40              if(cur.next != null)//cur.next有可能为空,当最后一个结点的时候
    41                  cur.next = cur.next.next;
    42              cur = cur.next;//后移指针
    43              pCur = pCur.next;//后移指针
    44          }
    45          return head;
    46      }
    47 }
  • 相关阅读:
    TOPCoder(一)Time
    highchart柱状图 series中data的数据构造
    (转)myeclipse工程 junit不能运行 ClassNotFoundException
    reserve和resize区别
    ++ fatal error C1083: 无法打开预编译头文件:“.Debug outer.pch”
    初学lua --lua嵌入c++的一个问题(初始化lua出错,版本问题)
    .NET中字符串split的C++实现
    成员函数指针与高效C++委托 (delegate)
    Android.mk 用法介绍
    cocos2d-x学习之旅(五):1.5 使用eclipse编译cocos2d-x示例项目,创建cocos2d-x android项目并部署到真机
  • 原文地址:https://www.cnblogs.com/fankongkong/p/7452114.html
Copyright © 2011-2022 走看看