剑指Offer复制复杂链表

编程

题目描述

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

/*

public class RandomListNode {

int label;

RandomListNode next = null;

RandomListNode random = null;

RandomListNode(int label) {

this.label = label;

}

}

*/

public class Solution {

public RandomListNode Clone(RandomListNode pHead)

{

if(pHead == null) return null;

RandomListNode currentNode = pHead;//当前指向的结点

//复制每个结点在其对应的后面

//复制next指针

while(currentNode != null){

RandomListNode cloneNode = new RandomListNode(currentNode.label);//复制的结点

RandomListNode nextNode = currentNode.next;//指向的下一个结点

currentNode.next = cloneNode;

cloneNode.next = nextNode;

currentNode = nextNode;

}

currentNode = pHead;

//复制random指针

while(currentNode != null){

currentNode.next.random = currentNode.random == null ? null : currentNode.random.next;

currentNode = currentNode.next.next;

}

currentNode = pHead;

//拆分

RandomListNode newHead = pHead.next;

while(currentNode != null){

RandomListNode cloneNode = currentNode.next;

currentNode.next = cloneNode.next;

cloneNode.next = cloneNode.next == null ? null : cloneNode.next.next;

currentNode = currentNode.next;

}

return newHead;

}

}

以上是 剑指Offer复制复杂链表 的全部内容, 来源链接: utcz.com/z/512723.html

回到顶部