劍指offer:複雜連結串列的複製
阿新 • • 發佈:2018-12-09
題目描述:
輸入一個複雜連結串列(每個節點中有節點值,以及兩個指標,一個指向下一個節點,另一個特殊指標指向任意一個節點),返回結果為複製後複雜連結串列的head。(注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空)
時間限制:1秒
空間限制:32768K
思路: 題目要求不能使用到原始連結串列節點的引用,那麼,我們就必須得生成新的連結串列,將資料 copy 過來就好了,時間複雜度 O(n)。
程式碼:
/**
* 生成一個新的結點
* @param node
* @return
*/
RandomListNode* getNode(RandomListNode* node) {
if (!node) return NULL;
RandomListNode* newNode = new RandomListNode(node->label);
return newNode;
}
/**
* 複製連結串列,遍歷原連結串列,對於每個位置上的結點,生成一個數據相等的新結點
* @param pHead
* @return
*/
RandomListNode* Clone(RandomListNode* pHead) {
RandomListNode *temp = new RandomListNode(0);
RandomListNode* head = NULL;
head = temp;
while (pHead) {
RandomListNode* cur = new RandomListNode(pHead->label);
RandomListNode* random = getNode(pHead->random);
cur->random = random;
temp->next = cur;
temp = temp->next;
pHead = pHead->next;
}
return head->next;
}
注意: 這裡除了 next ,還有 random ,所以在處理的時候,不能直接去引用原始節點的 random,也就是說,不能寫成這樣:cur->random = pHead->random 而應該從新生成一個 random 節點,將其資料拷貝過來。