26 複雜鍊錶的複製

2021-07-04 03:07:44 字數 1182 閱讀 5755

題目描述:

輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點)。

注:以下解析來自程式設計師面試題精選100題(49)-複雜鍊錶的複製[演算法]精簡。

第一步,為原始鍊錶的每個節點n建立對應的節點n』,並把n』插入到n的後面

第二步,設定複製出來的節點的sibling, n』的sibling指向n的sibling的next

第三步,拆分鍊錶,奇數個節點組成原始鍊錶,偶數個節點組成複製出的鍊錶

// 複製節點

void clonenodes(complexlistnode* phead)

}// 設定sibling

void connectsibling(complexlistnode* phead)

}// 拆分

complexlistnode* detachlist(complexlistnode* phead)

complexlistnode* pclonehead = phead->m_pnext;

complexlistnode* pclonenode = pclonehead;

complexlistnode* pnode = phead;

pnode->m_pnext = pclonenode->m_pnext;

pnode = pnode->m_pnext; // pnode先走一步,容易判斷是否到鍊錶尾

while (pnode)

return pclonehead;

}// 三步組合,時間複雜度o(n),空間複雜度o(n)但沒有使用額外的空間

complexlistnode* clone(complexlistnode* phead)

26 複雜鍊錶的複製

輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的 head。建立 random 鏈結 28 cur phead 29while cur null 34 cur clone next 35 3637 拆分 38 cur ...

面試26 複雜鍊錶的複製

1.複製原始鍊錶的每乙個結點,並用m pnext鏈結 設定每乙個結點的m psibling指標。但該指標可能指向此結點的前面或後面,需從頭定位。時間複雜度為o n 2 2.雜湊表存著配對資訊,o n 3.將原始結點n建立對應的n 這一次,把n 連線到n的後面 void clonenodes comp...

面試題26 複雜鍊錶的複製

以下圖為5個結點的複雜鍊錶,實線表示m pnext指標的指向,虛線表示m psibling指標的指向 方法一 分兩步 1 遍歷一遍鍊錶,用m pnext指標將鍊錶連起來,o n 2 確定每個m psibling指標的指向,需重新遍歷新鍊錶確定其m psibling的指向,o n 時間代價為o n 2...