《劍指offer》面試題26:複雜鍊錶的複製
分解複雜問題
請實現乙個函式用於複製乙個複雜鍊錶。在複雜鍊錶中,每個結點除了有乙個m_pnext指標指向下乙個結點外,還有乙個m_psibling指向鍊錶中的任意結點或者null。結點的c++定義如下:
//複雜鍊錶結點定義
struct complexlistnode
;//第一步
void clonenodes(complexlistnode *phead)
}//第二步
void connectsiblingnodes(complexlistnode *phead)
pnode = pcloned->m_pnext; }}
//第三步
complexlistnode* reconnectnodes(complexlistnode* phead)
while (pnode != null)
return pclonedhead;
}//合併三步
complexlistnode* clone(complexlistnode* phead)
// ********************測試**********************
complexlistnode* createnode(int nvalue)
void buildnodes(complexlistnode* pnode, complexlistnode* pnext, complexlistnode* psibling)
}void printlist(complexlistnode* phead)
}void test(char* testname, complexlistnode* phead)
// -----------------
// \|/ |
// 1-------2-------3-------4-------5
// | | /|\ /|\
// --------+-------- |
// -------------------------
void test1()
// m_psibling指向結點自身
// -----------------
// \|/ |
// 1-------2-------3-------4-------5
// | | /|\ /|\
// | | -- |
// |------------------------|
void test2()
// m_psibling形成環
// -----------------
// \|/ |
// 1-------2-------3-------4-------5
// | /|\
// | |
// |---------------|
void test3()
// 只有乙個結點
void test4()
// 魯棒性測試
void test5()
int main()
#include using namespace std;
//複雜鍊錶結點定義
struct complexlistnode
;complexlistnode* clone2(complexlistnode *phead)
//複製m_psibling指標
pnode = phead;
pcloned = pclonedhead;
while (pnode != null)
ptemp = pclonedhead;
while (k > 0)
pcloned->m_psibling = ptemp;
} pnode = pnode->m_pnext;
pcloned = pcloned->m_pnext;
} return pclonedhead;
}
#include #include using namespace std;
//複雜鍊錶結點定義
struct complexlistnode
;complexlistnode* clone3(complexlistnode* phead)
pnode = phead;
pcloned = pclonedhead;
while (pnode != null)
pnode = pnode->m_pnext;
pcloned = pcloned->m_pnext;
} return pclonedhead;
}
/*
struct randomlistnode
};*/
class solution
private:
void clonenodes(randomlistnode* phead)
}void connectrandomnodes(randomlistnode* phead)
pnode = pclonenode->next;}}
randomlistnode* reconnectnodes(randomlistnode* phead)
return pclonehead;}};
劍指Offer 面試題26 複雜鍊錶的複製
複雜鍊錶的複製 請事先函式complexlistnode clone complexlistnode phead 複製乙個複雜鍊錶。在複雜鍊錶中,每個結點除了有乙個m pnext指標 指向下乙個結點外,還有乙個m psibling指向鍊錶中的任意結點或者null。a b c d e 兄弟指向 a指向...
劍指offer 面試題26 複雜鍊錶的複製
以下圖為5個結點的複雜鍊錶,實線表示m pnext指標的指向,虛線表示m psibling指標的指向 解法一 分兩步1 遍歷一遍鍊錶,用m pnext指標將鍊錶連起來,o n 2 假設原始鍊錶中的某節點n的m psibling指向結點s,由於s的位置在鍊錶上有可能在n的前面也可能在n的後面,所以要定...
(劍指Offer)面試題26 複雜鍊錶的複製
請實現函式complexlistnode clone complexlistnode phead 複製乙個複雜鍊錶。在複雜鍊錶中,每個結點除了有乙個pnext指標指向下乙個結點之外,還有乙個psibling指向鍊錶中的任意結點或者null。結點的定義如下 struct complexlistnode...