劍指offer C 刷題總結(4)

2021-10-24 21:36:21 字數 3002 閱讀 1645

目錄

調整陣列順序使奇數字於偶數前面

題目:題解:

完整**:

鍊錶中倒數第k個節點

題目:題解:

完整**:

反轉鍊錶

題目:題解:

完整**:

合併兩個排序的鍊錶

題目:題解:

完整**:

樹的子結構

題目:題解:

完整**:

二叉樹的映象

題目:輸入描述:

題解:完整**:

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。

雙指標

class solution 

array[i] = tmp;

i++;}}

}};

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

說明:本題目包含複雜資料結構listnode,點此檢視相關資訊

方法一:普通解法

方法二:快慢指標

/*

struct listnode

};*/

class solution

int n = 0;

listnode* cur = plisthead;

while(cur != nullptr)

k = n - k;

while(k > 0 && plisthead != nullptr)

return plisthead;

*/// 方法二:快慢指標

if(k <= 0 || plisthead == nullptr)

listnode* fast = plisthead;

listnode* slow = plisthead;

while(k--) else

}while(fast)

return slow;

}};

輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。

說明:本題目包含複雜資料結構listnode,點此檢視相關資訊

雙指標

/*

struct listnode

};*/

class solution

return newnode;

}};

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。

說明:本題目包含複雜資料結構listnode,點此檢視相關資訊

合併

/*

struct listnode

};*/

class solution

if(phead2 == nullptr)

listnode *dummy = new listnode(0);

listnode *first = dummy;

while(phead1 != nullptr && phead2 != nullptr) else

}while(phead1 != nullptr)

while(phead2 != nullptr)

return dummy->next;

}};

輸入兩棵二叉樹a,b,判斷b是不是a的子結構。(ps:我們約定空樹不是任意乙個樹的子結構)

說明:本題目包含複雜資料結構treenode,點此檢視相關資訊

遞迴

/*

struct treenode

};*/

class solution

return dfs(proot1, proot2) || hassubtree(proot1->left, proot2) ||

hassubtree(proot1->right, proot2);

}bool dfs(treenode* proot1, treenode* proot2)

if(proot1 == nullptr)

return (proot1->val == proot2->val) && dfs(proot1->left, proot2->left) &&

dfs(proot1->right, proot2->right);

}};

操作給定的二叉樹,將其變換為源二叉樹的映象。

二叉樹的映象定義:源二叉樹 

8/ \

6 10

/ \ / \

5 7 9 11

映象二叉樹

8/ \

10 6

/ \ / \

11 9 7 5

說明:本題目包含複雜資料結構treenode,點此檢視相關資訊

遞迴

/*

struct treenode

};*/

class solution

treenode *node = proot->left;

proot->left = proot->right;

proot->right = node;

mirror(proot->left);

mirror(proot->right);

}};

劍指offer C 刷題總結(1)

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。雙指標 class solution int n array 0 size int l 0 int r n 1...

劍指offer C 刷題總結(2)

目錄 用兩個棧實現佇列 題目 題解 完整 旋轉陣列最小的數字 題目 題解 完整 斐波那契數列 題目 題解 完整 跳台階題目 題解 完整 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。當發生push和pop操作時,對兩個棧實現一次資料置換操作,實現佇列的先進先出。c...

劍指offer C 一天一題 4

今日碎碎念 事情永遠幹不完啊 題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。解題思路 前序的第乙個數是節點 中序找到節點位置,節點左為左樹,右為右樹 遞迴 實現 def...