35 複雜鍊錶的複製( 分解讓複雜問題簡單)

2022-08-05 02:51:10 字數 1279 閱讀 9676

題目描述:

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

測試用例:

功能測試(節點中的random指向自身;兩個節點的random形成環狀結構;鍊錶中只有乙個節點)

特殊輸入測試(空鍊錶nullptr)

解題思路:

1)分成三步:

一、根據原始鍊錶建立每個節點n對應的n』。把每個n' 連線到n的後面。(插入到原結點後方)

二、賦值節點的random指標

三、拆分兩個鍊錶

class solution 

//第一步 在原鍊錶每個節點的後面複製鍊錶

void clonenodes(randomlistnode* phead)

}//第二步 對random賦值

void connectrandomnodes(randomlistnode* phead)

}//第三步 拆分鍊錶

randomlistnode* reconnectnodes(randomlistnode* phead)

while(pnode)

return pclonehead;

}};

2)雜湊表方法

分為兩步:

一、複製原始列表的val與next,random置空,並使用雜湊表儲存的配對資訊。

二、設定複製鍊錶上的每個random指標。

class solution 

//需從頭開始設定random節點,設定操作指標

pnode=phead;

pclonednode=pclonedhead;

// 根據map中儲存的資料,找到對應的節點

while(pnode!=null)

//向後移動操作節點

pnode=pnode->next;

pclonednode=pclonednode->next;

}return pclonedhead;

}};

3)使用map儲存的配對資訊  

class solution 

phead1 = phead;

phead2 = newhead;

while(phead1)

return newhead;

}};

35 複雜鍊錶的複製

請實現copyrandomlist函式,複製乙個複雜鍊錶。在複雜鍊錶中,每個節點除了有乙個next指標指向下乙個節點,還有乙個random指標指向鍊錶中的任意節點或者null。示例 1 輸入 head 7,null 13,0 11,4 10,2 1,0 輸出 7,null 13,0 11,4 10,...

35 鍊錶 複雜鍊錶的複製

輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 2 重新遍歷鍊錶,複製老結點的隨機指標給新結點,如a1.random a.random.n...

35題複雜鍊錶的複製

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