剑指offer 算法 (代码的鲁棒性)
生活随笔
收集整理的這篇文章主要介紹了
剑指offer 算法 (代码的鲁棒性)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目描述
輸入兩個(gè)單調(diào)遞增的鏈表,輸出兩個(gè)鏈表合成后的鏈表,當(dāng)然我們需要合成后的鏈表滿足單調(diào)不減規(guī)則。
題目描述
輸入兩顆二叉樹A,B,判斷B是不是A的子結(jié)構(gòu)。
/* struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {} };*/ class Solution { public:bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){bool result = false;if( pRoot1 != NULL && pRoot2 != NULL ){if( pRoot1->val == pRoot2->val )result = DoesRootHaveSameLeaves(pRoot1,pRoot2);if( !result )result = HasSubtree(pRoot1->left,pRoot2);if( !result )result = HasSubtree(pRoot1->right,pRoot2);}return result;}bool DoesRootHaveSameLeaves(TreeNode* pRoot1, TreeNode* pRoot2){if( pRoot2 == NULL )return true;if( pRoot1 == NULL )return false;if( pRoot1->val != pRoot2->val )return false;return DoesRootHaveSameLeaves(pRoot1->left,pRoot2->left) && DoesRootHaveSameLeaves(pRoot1->right,pRoot2->right);} };
輸入一個(gè)鏈表,輸出該鏈表中倒數(shù)第k個(gè)結(jié)點(diǎn)。
解析:p1,p2保持k-1的距離,當(dāng)p1指向鏈表尾時(shí),p2正好指向倒數(shù)第k個(gè)結(jié)點(diǎn)
題目描述
輸入一個(gè)鏈表,反轉(zhuǎn)鏈表后,輸出鏈表的所有元素。
解析:curNode保存當(dāng)前結(jié)點(diǎn),preNode保存已遍歷過的反轉(zhuǎn)好的鏈表的頭結(jié)點(diǎn),newList作最后反轉(zhuǎn)好的鏈表頭。當(dāng)curNode不是指向鏈表尾時(shí),先保存鏈表nextNode值,使curNode->next指向preNode,preNode再保存curNode,最后恢復(fù)curNode為nextNode。直到curNode指向鏈表尾,即nextNode為空時(shí),newList=curNode。結(jié)束~~
輸入兩個(gè)單調(diào)遞增的鏈表,輸出兩個(gè)鏈表合成后的鏈表,當(dāng)然我們需要合成后的鏈表滿足單調(diào)不減規(guī)則。
解析:比較pHead1和pHead2的較小值賦給當(dāng)前結(jié)點(diǎn),遞歸比較下一個(gè)較小值賦予下一個(gè)結(jié)點(diǎn),直到某一鏈表為空
題目描述
輸入兩顆二叉樹A,B,判斷B是不是A的子結(jié)構(gòu)。
/* struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {} };*/ class Solution { public:bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){bool result = false;if( pRoot1 != NULL && pRoot2 != NULL ){if( pRoot1->val == pRoot2->val )result = DoesRootHaveSameLeaves(pRoot1,pRoot2);if( !result )result = HasSubtree(pRoot1->left,pRoot2);if( !result )result = HasSubtree(pRoot1->right,pRoot2);}return result;}bool DoesRootHaveSameLeaves(TreeNode* pRoot1, TreeNode* pRoot2){if( pRoot2 == NULL )return true;if( pRoot1 == NULL )return false;if( pRoot1->val != pRoot2->val )return false;return DoesRootHaveSameLeaves(pRoot1->left,pRoot2->left) && DoesRootHaveSameLeaves(pRoot1->right,pRoot2->right);} };
總結(jié)
以上是生活随笔為你收集整理的剑指offer 算法 (代码的鲁棒性)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指offer 算法 (代码的完整性)
- 下一篇: 剑指offer 算法 (画图让抽象问题形