鍊錶 深度拷貝乙個帶有隨機指標的鍊錶

2021-10-23 21:53:23 字數 1169 閱讀 1780

本文介紹兩種解法。

解法1:利用乙個map

listnode *copyrandomlist(listnode *head)

//第二次迴圈把新節點的random指標賦值

tmpnode = head;

while(tmpnode != null)

else

tmpnode = tmpnode->next;

}return newhead->next;

}

方法2: 還有一種更好的方法,看下圖就能理解。

1)先複製乙份原鍊錶,然後更新新鍊錶的random: node->next->random = node->random->next;最後拆分兩個鍊錶。

listnode *copyrandomlist(listnode *head)

//再遍歷一次更新新鍊錶的random節點

currnode = head;

while(currnode != null && currnode->next != null)

else

currnode = tmpnode;

/*第二個迴圈更優雅的寫法:

while(currnode != null)

else

currnode = tmpnode->next;

} */}

//拆分兩個鍊錶

listnode *dummynode = new listnode(0);

listnode *newhead = dummynode;

currnode = head;

while(currnode != null && currnode->next != null)

dummynode->next = null;

return newhead->next;

/*拆分鍊錶的另一種寫法:

currnode = head;

listnode *dup = head->next;

while(currnode != null)

return dup;*/}

深度拷貝乙個鍊錶

輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回乙個該鍊錶的深度拷貝。1 遍歷該鍊錶,複製每乙個節點,插入到當前節點的後面.形成如下鍊錶.1 1 2 2 2 將每個拷貝節點的隨機指標域,指向原節點 即拷貝節點的上乙個節點 的隨即指標域指向 ...

帶有隨機指標鍊錶的複製

上次介紹了關於鍊錶的相交與求環問題,這次我來給大家介紹乙個讓我腦瓜子嗡嗡的複雜鍊錶的複製問題。說實話,鍊錶也太狂野了,太會玩了,都快趕上蘇大強了。我的個天,畫了半天,別介意,本人畫畫水平不是特別高,大家湊合看。如上圖所示,每個節點包含乙個額外增加的隨機指標,該指標可以指向鍊錶中的任何節點或空節點。現...

隨機指標鍊錶深拷貝

題目描述給定乙個鍊錶,每個節點包含乙個額外增加的隨機指標,該指標可以指向鍊錶中的任何節點或空節點。要求返回這個鍊錶的 深拷貝。我們用乙個由 n 個節點組成的鍊錶來表示輸入 輸出中的鍊錶。每個節點用乙個 val,random index 表示 val 乙個表示 node.val 的整數。random ...