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...