《劍指Offer》面試題26 複雜鍊錶的複製

2021-08-21 06:12:28 字數 3545 閱讀 5787

《劍指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...