複製帶隨機指標的連結串列20201222
阿新 • • 發佈:2020-12-23
技術標籤:每天一道演算法題指標連結串列java資料結構單鏈表
複製帶隨機指標的連結串列
題目
複製帶隨機指標的連結串列
給定一個連結串列,每個節點包含一個額外增加的隨機指標,該指標可以指向連結串列中的任何節點或空節點。
要求返回這個連結串列的 深拷貝
我們用一個由 n 個節點組成的連結串列來表示輸入/輸出中的連結串列。每個節點用一個 [val, random_index] 表示:
val:一個表示 Node.val 的整數。
random_index:隨機指標指向的節點索引(範圍從 0 到 n-1);如果不指向任何節點,則為 null 。
提示:
- -10000 <= Node.val <= 10000
- Node.random 為空(null)或指向連結串列中的節點。
- 節點數目不超過 1000 。
分析
節點拷貝,重在random指標。
這裡主要思路是,在每個原節點後面新建一個val與原節點相等的新節點;然後新節點的next指標為對應原節點的next;最後一步斷鏈。
解題
public Node copyRandomList(Node head) {
if (head == null) return head;
// 第一步:每個原節點新建新的節點
Node node = head;
while (node != null) {
Node temp = new Node(node.val);
temp. next = node.next;
node.next = temp;
node = temp.next;
}
// 賦值新確認節點的隨機指標
node = head;
while (node != null && node.next != null) {
node.next.random = node.random.next;
node = node.next.next;
}
// 斷開連結串列,返回新的頭指標
Node newHead = new Node(0);
node = head;
Node cur = newHead;
while (node != null) {
cur.next = node.next;
cur = cur.next;
node.next = cur.next;
node = node.next;
}
return newHead.next;
}