面試題35 複雜鍊錶的複製

2022-03-03 20:35:25 字數 1316 閱讀 1170

請實現函式randomlist* clone(randomlist* phead),複製乙個複雜鍊錶。在複雜鍊錶中,每個節點除了有乙個next指標,還有乙個指向任意乙個節點的random指標。

解題思路

這個題目可以分兩步來完成:

通常第一步很簡單,可以當做簡單鍊錶的複製來解決,但主要是第二步,有幾種方案,但是需要乙個最優的(複雜度最低的)方案。

第三種方案是最妙的方案,但是需要將所有複製過程分為3步。分別是複製鍊錶、複製隨機指標、分割鍊錶

// 定義複雜鍊錶

struct randomlistnode

};// 普通鍊錶的複製(複製後的鍊錶與原煉表無任何關係)

listnode* clonebase(listnode* phead)

pnode = pnode->next;

if(pnode != nullptr)

else

passes->next = nullptr;

}return pans;

}// 複雜鍊錶的複製

void clonenodes(randomlistnode* phead)

}// 複製鍊錶的第二部分

void connectrandomnodes(randomlistnode* phead)

pnode = pcloned->next;

}}randomlistnode* clone(randomlistnode* phead)

while(pnode != nullptr)

return pclonehead;

}

文末附上普通鍊錶的複製
#include #include #include #include #include "listnode.h"

#include "treenode.h"

#include "graph.h"

using namespace std;

#define maxnum 100010

#define drift 1001

// 普通鍊錶的複製(複製後的鍊錶與原煉表無任何關係)

listnode* clonebase(listnode* phead)

pnode = pnode->next;

if(pnode != nullptr)

else

passes->next = nullptr;

}return pans;

}int main()

面試題35 複雜鍊錶的複製

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

面試題35 複雜鍊錶的複製

一 題目 請實現函式complexlistnode clone complexlistnode phead 複製乙個複雜鍊錶。在複雜鍊錶中,每個結點除了有乙個m pnext指標指向下乙個結點外,還有乙個m psibling 指向鍊錶中的任意結點或者nullptr。二 關鍵 1.在原始鍊錶上擴充新的鍊...

面試題35 複雜鍊錶的複製

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