1. 程式人生 > >劍指offer:複雜連結串列的複製

劍指offer:複雜連結串列的複製

題目描述:

  輸入一個複雜連結串列(每個節點中有節點值,以及兩個指標,一個指向下一個節點,另一個特殊指標指向任意一個節點),返回結果為複製後複雜連結串列的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 節點,將其資料拷貝過來。