【问题描述】

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

【AC代码】

 1 /*
 2 public class RandomListNode {
 3     int label;
 4     RandomListNode next = null;
 5     RandomListNode random = null;
 6
 7     RandomListNode(int label) {
 8         this.label = label;
 9     }
10 }
11 */
12 public class Solution {
13     public RandomListNode Clone(RandomListNode pHead)
14     {
15         if (pHead == null) return null;
16
17         RandomListNode currentNode = pHead;
18         while (currentNode != null) {
19             RandomListNode cloneNode = new RandomListNode(currentNode.label);
20             RandomListNode nextNode = currentNode.next;
21             currentNode.next = cloneNode;
22             cloneNode.next = nextNode;
23             currentNode = nextNode;
24         }
25
26         currentNode = pHead;
27         while (currentNode != null) {
28             currentNode.next.random = currentNode.random == null ? null : currentNode.random.next;
29             currentNode = currentNode.next.next;
30         }
31
32         currentNode = pHead;
33         RandomListNode pCloneHead = pHead.next;
34         while (currentNode != null) {
35             RandomListNode cloneNode = currentNode.next;
36             currentNode.next = cloneNode.next;
37             cloneNode.next = currentNode.next == null ? null : currentNode.next.next;
38             currentNode = currentNode.next;
39         }
40
41         return pCloneHead;
42     }
43 }
View Code

Referencehttps://www.cnblogs.com/darlinFly/p/9339280.html

12-31 07:05