博主现在从PTA过渡到了力扣进行刷题,近期在实习面试过程中也发现需要现场写完整代码(也就是ACM代码),从力扣注重函数实现的格式中还有点难切换出来,但是在搜索过程中这种完整代码的博客内容好少啊。于是也动手写了完整的代码和大家一起分享,平时也可以稍微练习一下,不然连头文件怎么写可能都会忘。重点在于树和链表,此篇以力扣上的题为例进行展示。由于这里仅是对完整代码进行展示,因而不对解题内容作解析。
-
- 反转链表 / 剑指 Offer 24. 反转链表
#include#include using namespace std; struct ListNode{ int val; ListNode* next; ListNode(int x):val(x),next(NULL){} }; ListNode* create(vector arr){ int i; ListNode *p,*head,*pre; head = new ListNode(0); //给一个初始值0 pre = head; for(i = 0;i< arr.size();i++){ p = new ListNode(arr[i]); pre->next = p; pre = p; } return head; } int main() { int arr[] = {5,4,3,2,1,0}; vector v(arr,arr+sizeof(arr)/sizeof(int)); //把int型数组转化为vector,注意这里的转化方式 ListNode* L = create(v); L = L->next; //要有这步,否则要在create函数中返回head->next即L指向头结点 while(L!=NULL){ cout<< L->val; L = L->next; } return 0; }
-
- 二叉树的最大深度
#include#include #include using namespace std; struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int x):val(x),left(NULL),right(NULL){}; }; int getDepth(TreeNode* root){ if(root == NULL) return 0; //注意终止条件 int leftDepth = getDepth(root->left); int rightDepth = getDepth(root->right); int len = 1 + max(leftDepth, rightDepth); return len; } TreeNode* createTree(vector v){ TreeNode **nodes = new TreeNode*[v.size()]; //这步查了很多方法才解决的 //将int数据转换为TreeNode节点 for (int i = 0; i < v.size(); i++) { nodes[i] = new TreeNode(v[i]); } queue nodeQueue; nodeQueue.push(nodes[0]); TreeNode *node; #include #include #include using namespace std; struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int x):val(x),left(NULL),right(NULL){}; }; int getDepth(TreeNode* root){ if(root == NULL) return 0; //注意终止条件 int leftDepth = getDepth(root->left); int rightDepth = getDepth(root->right); int len = 1 + max(leftDepth, rightDepth); return len; } TreeNode* createTree(vector v){ TreeNode **nodes = new TreeNode*[v.size()]; //vector nodes; //将int数据转换为TreeNode节点 for (int i = 0; i < v.size(); i++) { nodes[i] = new TreeNode(v[i]); } queue nodeQueue; nodeQueue.push(nodes[0]); TreeNode *node; int index = 1; while (index < v.size()) { node = nodeQueue.front(); nodeQueue.pop(); nodeQueue.push(nodes[index++]); node->left = nodeQueue.back(); nodeQueue.push(nodes[index++]); node->right = nodeQueue.back(); } return nodes[0]; } int main() { int arr[] = {3,9,20,NULL,NULL,15,7}; vector v(arr,arr+sizeof(arr)/sizeof(int)); TreeNode* root = createTree(v); int depth = getDepth(root); cout< 大家一起加油吧~坚持刷题,总会有收获的!真的是熟能生巧,但是对于新的题也要逐步尝试用自己的思维敢于突破解题呀!所以也要锻炼自己举一反三的能力呢!



