複雜鍊錶的複製

2021-09-25 15:31:48 字數 1750 閱讀 2661

題目描述

輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的head。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)

首先這道題可以在這裡進行演算法測試:複雜鍊錶的複製

定義一下演算法描述的鍊錶節點的資料結構:

public

class

randomlistnode

}

演算法其實並不複雜,但是要將其清楚且完整地表達並且實現出來,還是需要一定的時間與**功底。

認真分析之後,將問題分解,問題分解的好處就是,不要求演算法能夠一蹴而就,並且一蹴而就的演算法**實現會極大增加演算法的實現難度。

所以通過分析,將演算法分成如下3個步驟

(1). 第一步:首先拷貝出每個節點,由於鍊錶是從頭到尾拷貝的,那麼後面的拷貝子節點還暫時沒有生成,所以我們就暫時僅僅拷貝單個節點,拷貝的子節點字段暫時不設定。等到完全拷貝之後,到第二部再進行設定。

}**很簡單,就是單純地在每個源鍊錶節點中間拷貝乙個節點插入進去即可。

(2). 第二步:補充拷貝後節點的完整性。即,設定每個拷貝的節點的子節點(即資料結構中的random欄位)

}}(3). 第3步:將整個鍊錶拆成兩個鍊錶,乙個是源鍊錶,乙個是拷貝後的鍊錶。

private randomlistnode reconnectnodes

(randomlistnode node)

return dummyhead.next;

}

這裡用到了設定虛擬頭節點技巧,這是乙個亮點,其它沒啥技巧,很容易懂。

下面是整個執行通過測試的**:

public

class

solution

private

void

clonenodes

(randomlistnode node)

private

void

connectsilblingnodes

(randomlistnode node)

private randomlistnode reconnectnodes

(randomlistnode node)

}

總的來說還是基本的鍊錶操作,但是問題要分析清楚,問題分析清楚就簡單了。

鍊錶 複雜鍊錶的複製

問題描述 請實現函式complexlistnode clone complexlistnode phead 複製乙個複雜鍊錶。在複雜鍊錶中,每個結點除了有乙個next指標指向下乙個結點之外,還有乙個random指向鍊錶中的任意結點或者null。結點的定義如下 struct randomlistnod...

複雜鍊錶複製

複雜鍊錶複製的標頭檔案mlist.h ifndef mlist h define mlist h include include includetypedef int datatype typedef struct node node,pnode,plist pnode crealist datat...

複製複雜鍊錶

題目 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 解題思路 首先有三種解法 第一種就是中規中矩的解法,首先複製next指標的節點,之後...