面試題 複雜鍊錶複製

2021-10-04 19:18:16 字數 1053 閱讀 7889

lettcode面試題35. 複雜鍊錶的複製

請實現 copyrandomlist 函式,複製乙個複雜鍊錶。在複雜鍊錶中,每個節點除了有乙個 next 指標指向下乙個節點,還有乙個 random 指標指向鍊錶中的任意節點或者 null。

class node {

int val;

node next;

node random;

public node(int val) {

this.val = val;

this.next = null;

this.random = null;

思路:1)構建新鍊錶的結點,random為null,用原來鍊錶節點的next指向對應的新結點,新結點的next指向原鍊錶的下乙個結點。

2)給新節點的random賦值。

3)恢復原鍊錶和新鍊錶的鍊錶結構。

public node copyrandomlist(node head) {

if (head == null) {

return null;

node cur = head;

node tmp = head;

while (cur != null) {

tmp = new node(cur.val);

tmp.next = cur.next;

cur.next = tmp;

cur = cur.next.next;

cur = head;

while (cur != null) {

if (cur.random != null) {

cur.next.random = cur.random.next;

cur = cur.next.next;

cur = head;

node res = head.next;

while (cur != null && cur.next != null) {

tmp = cur.next;

cur.next = tmp.next;

cur = tmp;

return res;

面試題 複雜鍊錶的複製

對於這個題,基本會有三個思路 1.這裡鍊錶的複製和單鏈表最大的不同,就是多了乙個自由指標 psub 那麼最簡單的想法就是,遍歷單鏈表,找到psub指向的節點,然後複製,這樣做最簡單,事件複雜度為o n的平方 2.基於第一種方法的優化,第一種方法把事件浪費在了查詢節點上,那麼我們可以建立乙個雜湊函式,...

面試題26 複雜鍊錶的複製

以下圖為5個結點的複雜鍊錶,實線表示m pnext指標的指向,虛線表示m psibling指標的指向 方法一 分兩步 1 遍歷一遍鍊錶,用m pnext指標將鍊錶連起來,o n 2 確定每個m psibling指標的指向,需重新遍歷新鍊錶確定其m psibling的指向,o n 時間代價為o n 2...

面試題30 複雜鍊錶的複製

題目 請實現函式complexlistnode clone complexlistnode phead 複製乙個複雜鍊錶。在複製鍊錶中,每乙個結點除了有乙個m pnext指標指向下乙個結點處,還有乙個m psibling指向鍊錶中的任意結點或者null。結點定義如下 struct complexli...