複製帶隨機指標的鍊錶

2022-03-23 16:13:34 字數 1432 閱讀 5203

給定乙個鍊錶,每個節點包含乙個額外增加的隨機指標,該指標可以指向鍊錶中的任何節點或空節點。

要求返回這個鍊錶的深拷貝。 

示例:

輸入:,"val":2},"random":,"val":1}

解法1:

/**

* 建立乙個存放節點的複製節點的map

*/static mapvisitedmap = new hashmap<>(8);

public

static

node copyrandomlist(node head)

/*先看複製節點存不存在,如果存在直接返回

*/node value =visitedmap.get(head);

if (value != null

)

/*建立乙個複製節點

*/node node = new node(head.val, null, null

);

/*將複製節點放入map中

*/visitedmap.put(head, node);

/*複製節點的下乙個節點就是head的下個節點

*/node.next =copyrandomlist(head.next);

/*複製節點的隨機節點就是head的隨機節點

*/node.random =copyrandomlist(head.random);

return

node;

}

view code

解法2:

public

static

node copyrandomlist1(node head)

/*定義乙個頭節點的引用

*/node pre =head;

/*迴圈裡操作是把copy節點放在當前節點後面

*/while (pre != null

)

/*頭節點引用再次指向頭節點

*/pre =head;

/*這步迴圈操作是把當前節點後面的copy節點的random賦值為與當前節點同步的copy節點

*/while (pre != null

)

/*頭節點引用再次指向頭節點

*/pre =head;

/*定義乙個copy頭節點引用

*/node h =pre.next;

/*這步迴圈操作是把當前節點後面的copy節點的next賦值為與當前節點同步的copy節點,並與copy節點分離成2個不同的鏈

*/while (pre != null

) pre =b;}}

return

h; }

view code

複製帶隨機指標的鍊錶

給出乙個鍊錶,每個節點包含乙個額外增加的隨機指標可以指向鍊錶中的任何節點或空的節點。返回乙個深拷貝的鍊錶。public randomlistnode copyrandomlist randomlistnode head hashmapmap new hashmap randomlistnode du...

複製帶隨機鍊錶的指標

題目要求 給定乙個鍊錶,每個節點包含乙個額外增加的隨機指標,該指標可以指向鍊錶中的任何節點或空節點。要求返回這個鍊錶的深拷貝。這道題我知道的有兩種解法 一種是遍歷鍊錶,找到每乙個節點的隨機指標,但是這樣做時間複雜度是o n 2 另外一種是拷貝節點的方法,下面我用一幅圖具體講一下節點的拷貝思路。下面配...

複製帶隨機指標的鍊錶

解題思路是先建立一條複製鍊錶,複製鍊錶的val和原始鍊錶的val相對應,建立過程中,使用雜湊表建立原始結點和複製結點的對映。原始結點為key,複製結點為value。那麼,在複製鍊錶中查詢當前結點的隨機指標時,當前對應原始結點的隨機指標所對映的值value就是這個複製結點的隨機指標。這個解題思路關鍵在...