题目:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null 思路:链表存在环,则没有尾节点. 对于链表一个指针无法解决时,考
题目:输入两个链表,找出它们的第一个公共结点 思路:暴力法时间复杂度O(n^2). 当两个链表具有公共节点时,第一个公共节点之后的节点全部相等.
题目一:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度 思路:求树的深
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印 思路:典型的队列使用 void PrintFromTopToBottom(TreeNode* root) { if(root==nullptr) return ; queue<TreeNode*> q; q.push(root); while(!q.empty()){ TreeNode* node = q.front(); q.pop(); cout<<node->val<<" "; if(node->left!=nullptr) q.push(node->left); if(node->right!=nullptr) q.push(node->right); } } 拓展1: 分层从
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1). 思路:对于栈,要在O(1)时间内获
题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左
题目:操作给定的二叉树,将其变换为源二叉树的镜像 如上图所示,树的镜像是将每个节点的左右子树交换,因此,对于每个节点只需要交换左右子树的指针,
题目:输入两棵二叉树A,B,判断B是不是A的子结构. 如上图,其中B为A的子结构. 思路: 判断是否为子树,首先需要定位到子树的根节点,然后对两颗
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路:对于两个递增的链表合并,合并后仍递增
题目:输入一个链表,反转链表后,输出新链表的表头. 思路一:链表反转,需将节点指向改变. 可以每次取下一个节点向之前的节点中插入,采用头插法实现