帶有隨機指標鍊錶的複製

2021-09-19 06:31:44 字數 1369 閱讀 7016

上次介紹了關於鍊錶的相交與求環問題,這次我來給大家介紹乙個讓我腦瓜子嗡嗡的複雜鍊錶的複製問題。。 說實話,鍊錶也太狂野了,太會玩了,都快趕上蘇大強了。。。。。。

我的個天,畫了半天,別介意,本人畫畫水平不是特別高,大家湊合看。如上圖所示,每個節點包含乙個額外增加的隨機指標,該指標可以指向鍊錶中的任何節點或空節點。現在要求返回這個鍊錶的深拷貝。這該怎麼辦呢,一開始我也一頭霧水,這是個啥啊,看半天也沒看懂,最後看是看明白了,但是不會做,這就尷尬了,我當時就比較疑惑的是怎麼根據原有鍊錶的形式複製新鍊錶,要建立新鍊錶就要建立節點,假如我們第乙個鍊錶的節點的隨機指標指向最後乙個節點怎麼辦,我這還沒有建立好最後乙個節點。。。。 也許你會說那我們可以先根據原有鍊錶建立好新鍊錶,先不管隨機指標,建立好在複製我們的隨機指標,但是,但是,但是,我們的隨機指標指向的是隨機的節點,我們如何去改變隨機指標的指向呢? 哎呀,頭大了,,,,,

想了半天也不知道從何下手,最後經由大佬指點,便有了下面這種思路。。

是不是很神奇,很驚喜!!! 哈哈,其實我也沒想到原來還可以這樣操作,如果你還是不太明白的話,下面咱們上**,或許你看看**就懂了

#includeusing namespace std;

class node

node(int _val, node* _next, node* _random)

};void print(node* head)

printf("\n");

}//複製隨機鍊錶

node* copyrandomlist(node* head)

//建立新節點,插入到舊節點後面

node* cur = head;

while (cur != null)

// 插入成功,複製random指標

cur = head;

while (cur != null)

cur = cur->next->next;

} //拆分鍊錶

cur = head;

node* newhead = cur->next;

while (cur != null)

cur = cur->next;

} return newhead;

}node* createnode(int val)

int main()

其實在我看來關於鍊錶相關的問題,重在畫圖,因為大部分人在大腦中是很難構建出來這個過程的。對於這個問題而言,我覺得還蠻有意思的,雖然自己很菜,沒想出解決方案來,但我相信也許大家還會有好的方法,天馬行空的思路來解決這個問題,還請不吝賜教,,, 讓我也膜拜一下!!!

複製帶隨機指標的鍊錶

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

複製帶隨機鍊錶的指標

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

複製帶隨機指標的鍊錶

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