每日一题
sifanchao
这个作者很懒,什么都没留下…
展开
-
输入一个链表,输出该链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点注意点: 需要判断所给的K是否大于链表长度class Solution {public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(pListHead==NULL) return NULL; ...原创 2018-07-31 01:29:43 · 231 阅读 · 0 评论 -
每日一题(12)
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针分析: 1 1 / \ / 2 3 2 ...原创 2018-08-19 22:10:42 · 152 阅读 · 0 评论 -
每日一题(13)
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的思路: 1. 如果二叉树为空树,则是对称的 2. 从其子树开始检测,如果根的左右子树: a. 根的左右子树均为空,则是对称的 b. 根的左右子树一棵为空,一棵不为空,则不对称 c. 根...原创 2018-08-19 20:53:18 · 183 阅读 · 0 评论 -
每日一题(14)
设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。如果二叉树的序列化是从根节点开始,那么对应的而反序列化也是从根节点开始的。因此可以使用二叉树的前序遍历来序列化二叉树,当前序遍历碰到null值是,使用“#”表示,每一个节点的数值之间用“,”隔开。/*public class TreeNode { ...原创 2018-08-19 20:33:18 · 143 阅读 · 0 评论 -
每日一题(15)
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class So...原创 2018-08-19 16:52:47 · 185 阅读 · 0 评论 -
每日一题(4)
给定一个链表,把最后一个结点插入到第1个结点后,倒数第二个结点插入到第2个结点后,倒数第三个结点插入到第3个结点后,以此类推……【必须在不改变节点值的情况下就位】 思路: 先用快慢指针找到链表的中点,然后翻转链表后半部分,再和前半部分组合。 注意: 把链表分成两半时,前半段的尾节点要置为NULL,翻转链表时也要把尾节点置为NULL。/** * Definiti...原创 2018-08-03 16:07:48 · 188 阅读 · 0 评论 -
每日一题(10)
class ReverseStack {public: int level = 0; vector<int> reverseStackRecursively(vector<int> stack, int top) { // write code here if(top > 0){  ...原创 2018-08-12 10:01:42 · 227 阅读 · 0 评论 -
每日一题(3)
判断一个链表是否带环class Solution {public: bool hasCycle(ListNode *head) { if(head==NULL) return false; ListNode *fast=head; ListNode *slow=head; while(fast...原创 2018-08-02 19:35:57 · 156 阅读 · 0 评论 -
每日一题(9)
思路:判断此字符串是否为数字字符串,如果是,压栈;否则,该串为符号位压栈时要将字符串转化为整数存储,在C99里可以用s.push(atoi(tokens[i++].c_str())),在C++11里直接用stoi当tokens[i]为符号位时,出栈拿数据计算。此时需要分两种情况,如果栈中只有一个元素,那么直接返回该元素;否则,进行计算left_num + sym + right_nu...原创 2018-08-10 17:43:38 · 175 阅读 · 0 评论 -
每日一题(8)
思路: 我们可以设计两个递归函数,第一个函数返回栈底元素并移除该元素得以让下一个递归函数进行压入操作 第一个函数示意图: 第二个函数调用: #include<string>#include<iostream>#include<stack>using namespace std;//得到当前栈的栈底元素int getAndRemo...原创 2018-08-10 13:39:57 · 153 阅读 · 0 评论 -
每日一题(7)
复杂度 时间复杂度 O(n) 空间复杂度 O(n) 递归栈空间思路 从末尾到首位,对两个单链表每一位数字对齐相加,再将结果用单链表表示出来即可。 技巧在于如何处理不同长度的数字,以及进位和最高位的判断。这里对于不同长度的数字,我们通过将较短的数字补0来保证每一位都能相加。 递归写法的思路比较直接,即判断该轮递归中两个ListNode是否为null。全部为NULL时,返回...原创 2018-08-10 12:40:56 · 150 阅读 · 0 评论 -
每日一题(2)
二叉树转化成排序的双向链表 中序(二叉搜索树满足从小到大)遍历树的每一个节点 用pLastNode指向已经转换好的链表的最后的一个节点(值最大的节点)。当遍历到值为10的节点的时候,其左子树已经转换好了,因此pLastNode指向值为8的节点。接着把根结点链接到链表中,值为10的节点成了链表中的最后一个节点(新的值最大的节点)。同理,右子树。BTreeNode* Convert(...原创 2018-08-01 01:52:09 · 146 阅读 · 0 评论 -
每日一题(6)
#include <iostream>#include <string>using namespace std;int main(){ string s1, s2; getline(cin, s1); getline(cin, s2); int i = s1.size(); int j = 0; for (j...原创 2018-08-04 21:55:13 · 118 阅读 · 0 评论 -
每日一题(11)
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度解析: 1 / \ 2 3 / / \ 4 5 6 二叉树的深度,即为二叉树的高度,...原创 2018-08-19 22:45:55 · 159 阅读 · 0 评论