1. 程式人生 > 其它 >複製帶隨機指標的連結串列20201222

複製帶隨機指標的連結串列20201222

技術標籤:每天一道演算法題指標連結串列java資料結構單鏈表

複製帶隨機指標的連結串列

題目

複製帶隨機指標的連結串列
給定一個連結串列,每個節點包含一個額外增加的隨機指標,該指標可以指向連結串列中的任何節點或空節點。

要求返回這個連結串列的 深拷貝

我們用一個由 n 個節點組成的連結串列來表示輸入/輸出中的連結串列。每個節點用一個 [val, random_index] 表示:

val:一個表示 Node.val 的整數。
random_index:隨機指標指向的節點索引(範圍從 0 到 n-1);如果不指向任何節點,則為  null 。

例項
例項2
提示:

  • -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; }