劍指offer面試題26

2021-06-22 08:29:50 字數 1588 閱讀 5037

面試題26:複雜鍊錶的複製

題目:請實現函式complexlistnode* clone(complexlistnode* phead),複製乙個複雜鍊錶。在複製鍊錶中,每個結點除了有乙個m_pnext指標指向下乙個結點外,還有乙個m_psibling指向鍊錶中任意結點或者null。結點的c++定義如下:

struct complexlistnode

;

思路:面對乙個這麼複雜的問題該腫麼辦?我們應該採取分而治之的辦法,將複雜的問題分成乙個個小小的問題,將小問題解決,最後串聯起來。下面我們把這個問題分成了3步加以解決,同時針對每一步定義乙個子函式。

演算法實現;

// 面試題26.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

struct complexlistnode

;//********基本操作********

//建立結點

complexlistnode* createnode(int nvalue)

//建立連線鍊錶結點

void buildnodes(complexlistnode* pnode, complexlistnode* pnext, complexlistnode* psibling)

}//列印鍊錶

void printlist(complexlistnode* phead)

}//銷毀鍊錶

void destroylist(complexlistnode* phead)

}/*****************************************/

//第一步

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)

/*************測試***************/

// -----------------

// \|/ |

// 1-------2-------3-------4-------5

// | | /|\ /|\

// --------+-------- |

// -------------------------

void test1()

int _tmain(int argc, _tchar* argv)

劍指offer 面試題26 樹的子結構

完整 位址 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 找到樹a中與樹b根節點值相同的節點,設樹a中該節點為subroot 在遍歷樹b的同時,遍歷subroot,如果遍歷完樹b發現subroot中沒有與b不一致的地方,則b是a的子結構 遍歷樹b時,發現su...

劍指offer 面試題26 樹的子結構

輸入兩棵二叉樹a和b,判斷b是不是a的子結構。約定空樹不是任意乙個樹的子結構 b是a的子結構,即 a中有出現和b相同的結構和節點值。例如 給定的樹 a 3 4 5 1 2 給定的樹 b 4 1返回 true,因為 b 與 a 的乙個子樹擁有相同的結構和節點值。示例 1 輸入 a 1,2,3 b 3,...

劍指offer 面試題26樹的子結構

題目描述 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 思路 數還有子樹,那肯定是用遞迴寫比較方便了。題目要做的是從a 中找b 所以需要遍歷一遍a樹並且尋找a中與b的頭節點相等的那個節點,找到這個節點後就遍歷a樹和b樹,看是否相等。第二個方法的遞迴結束條件分...