劍指 Offer 35 複雜鍊錶的複製

2022-09-18 06:12:28 字數 1204 閱讀 5430

劍指 offer 35. 複雜鍊錶的複製

本題要求的是複製原鍊錶,所以對於每乙個原節點,都需要有乙個和它相對應的老節點,從而我們建立乙個老節點和新節點的對映關係,old2new,用來儲存老節點和新節點的對映關聯關係。

先遍歷一趟原鍊錶,將所有的節點都建立與之對應的新節點。

再遍歷一趟鍊錶時,將每個節點的\(next\)節點和\(random\)節點都從新鍊錶節點中獲取。

/*

// definition for a node.

class node }*/

class solution

node p = head;

while(p != null)

p = head;

while(p != null)

return old2new.get(head);}}

雖然雜湊表的做法比較容易理解,但在大部分公司的面試中,都不是乙個比較好的做法,因為新建雜湊表需要時間,並且使得空間複雜度達到了\(o(n^2)\)級別,所以這裡還需要了解空間複雜度為常數級別的做法。

可以在原煉表中的每乙個節點,都複製乙個與之對應的新節點在原節點的後面,再從頭開始遍歷遍歷鍊錶,如果當前遍歷到的節點有random節點,那麼它的複製節點就有cur.next.random = cur.random.next;

這樣就將每個節點和它的random節點相互對應上了,再將複製後的節點從原煉表中一分為二即可。

class solution 

// 完成鍊錶節點的複製

node cur = head;

while (cur != null)

// 完成鍊錶複製節點的隨機指標複製

cur = head;

while (cur != null)

cur = cur.next.next;

}// 將鍊錶一分為二

node copyhead = head.next;

cur = head;

node curcopy = head.next;

while (cur != null)

}return copyhead;}}

劍指Offer 35 複雜鍊錶的複製

請實現啊函式complexlistnode clone complexlistnode phead 複製乙個 複雜鍊錶。在複雜鍊錶中除了有乙個m pnext指標指向下乙個節點,還有乙個m psaibling 指標指向鍊錶中的任意節點或者nullptr。節點定義如下 class complexlist...

(劍指offer)35 複雜鍊錶的複製

輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 思路 1.先複製鍊錶節點的值放在原來的節點後面,組成乙個新的鍊錶 2.處理複雜指標 安排複...

劍指offer35 複雜鍊錶的複製

輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 剛開始看題時還有點摸不著頭腦,感覺這道題沒有任何存在的意義。後來看了大家的討論才明白。思想...