題目描述:
輸入乙個複雜鍊錶(每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點),返回結果為複製後複雜鍊錶的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 solutionphead1 = 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...