1. 程式人生 > >劍指 Offer - 25:複雜連結串列的複製

劍指 Offer - 25:複雜連結串列的複製

題目描述

輸入一個複雜連結串列(每個節點中有節點值,以及兩個指標,一個指向下一個節點,另一個特殊指標指向任意一個節點),返回結果為複製後複雜連結串列的head。
注意:輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空

題目連結:https://www.nowcoder.com/practice/f836b2c43afc4b35ad6adc41ec941dba

解題思路

1、複製每個節點,到源結點的 next 處;
2、重新遍歷連結串列,調整 cloneNode 的 random 指向;
3、拆分連結串列,返回複製連結串列

public
class Solution { public RandomListNode Clone(RandomListNode pHead) { if (pHead == null) return pHead; RandomListNode curNode = pHead; // 1. 複製每個節點,到源結點的 next 處 while (curNode != null) { RandomListNode cloneNode = new RandomListNode(curNode.
label); RandomListNode nextNode = curNode.next; curNode.next = cloneNode; cloneNode.next = nextNode; curNode = nextNode; } // 2. 重新遍歷連結串列,調整 cloneNode 的 random 指向 curNode = pHead; while (curNode != null) { curNode.
next.random = (curNode.random == null ? null : curNode.random.next); curNode = curNode.next.next; } // 3. 拆分連結串列 curNode = pHead; RandomListNode cloned = pHead.next; while (curNode != null) { RandomListNode cloneNode = curNode.next; curNode.next = cloneNode.next; cloneNode.next = (cloneNode.next == null ? null : cloneNode.next.next); curNode = curNode.next; } return cloned; } }