25复杂链表的复制

Posted fankongkong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于25复杂链表的复制的主要内容,如果未能解决你的问题,请参考以下文章

25.复杂链表的复制

[剑指offer] 25. 复杂链表的复制

25复杂链表的复制

25 复杂链表的复制

25.复杂链表的复制

剑指Offer25复杂链表的复制