牛客網刷題之複雜連結串列的複製
阿新 • • 發佈:2019-02-08
題目描述:
解題思路:
過程分為三步:
首先,遍歷連結串列,複製當前結點currentNode對應的結點cloneCurNode,並將cloneCurNode放置在currentNode的後面,這樣就形成一條包含原始鏈以及複製鏈的長鏈。
然後,還需將原始鏈中指標的方向賦予複製鏈
最後,將長鏈拆分,就得到原始鏈和複製鏈了。
題解:
public RandomListNode Clone(RandomListNode pHead) {
if(pHead == null){
return null;
}
//複製結點
RandomListNode currentNode = pHead;
while(currentNode != null){
RandomListNode cloneNode = new RandomListNode(currentNode.label);
cloneNode.next = currentNode.next;
currentNode.next = cloneNode;
currentNode = cloneNode.next;
}
//複製指標指向
currentNode = pHead;
while(currentNode != null){
RandomListNode cloneNode = currentNode.next;
if(currentNode.random != null){
cloneNode.random = currentNode.random.next;
}
currentNode = cloneNode.next;
}
//拆分長鏈
currentNode = pHead;
RandomListNode cloneHead = pHead.next;
RandomListNode tempNode;
while(currentNode.next != null){
tempNode = currentNode.next;
currentNode.next = tempNode.next;
currentNode = tempNode;
}
return cloneHead;
}