
2021年1月 链表
文章平均质量分 54
链表
麻利麻利吼
这个作者很懒,什么都没留下…
展开
-
2021-1-31 BST结点最小差 汉诺塔问题
题目1 二叉搜索树节点最小距离给定一个二叉搜索树的根节点 root,返回树中任意两节点的差的最小值。解思路:由于题目给的是二叉搜索树,因此中序遍历该树可以得到有序的结点顺序。通过标记上一节点prev,逐步取当前遍历结点-prev的值和目前最小值比较,选更小的值,最后可以获得差值最小。解1 DFS中序递归class Solution { int minNum = INT_MAX; TreeNode* prev = NULL;public: int minDiffInBST原创 2021-01-31 16:19:40 · 101 阅读 · 0 评论 -
2021-01-30 跳水板 判断平衡二叉树 二叉树变单链表
题目1 跳水板你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。返回的长度需要从小到大排列。示例 1输入:shorter = 1longer = 2k = 3输出: [3,4,5,6]解释:可以使用 3 次 shorter,得到结果 3;使用 2 次 shorter 和 1 次 longer,得到结果 4 。以此类推,得到最终结果。解:两个特殊情况原创 2021-01-30 16:10:38 · 135 阅读 · 0 评论 -
2021-1-29斐波那契数列 青蛙跳台阶 二叉树深度
题目1 斐波那契数列写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。解法1 递归终止条件:n=0:返回0;n=1:返回1返回值:F(N) = F(N - 1) + F(N - 2)class Solution {public: int fib(int n) {原创 2021-01-30 16:10:04 · 221 阅读 · 0 评论 -
20201-1-28递归
题目1 给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。示例1:输入:root = [10,5,15,3,7,null,18], low = 7, high = 15输出:32class Solution {public: int Sum;public: int rangeSumBST(TreeNode* root, int low, int high) { //若结点NULL,直接返回 if(root ==原创 2021-01-29 10:33:55 · 80 阅读 · 0 评论 -
2021-1-26转置数组
题目1 转置数组申请空间,行列数为原数组的转置遍历原数组,倒置存入新数组。class Solution {public: vector<vector<int>> transpose(vector<vector<int>>& A) { int i,j; int rows = A[0].size(); int cols = A.size(); vector<vecto原创 2021-01-26 17:59:59 · 78 阅读 · 0 评论 -
2021-02-1-23 环形链表
题目1 环形链表给定一个链表,判断链表中是否有环。示例 1:输入:head = [3,2,0,-4]输出:true示例 2:输入:head = [1], pos = -1输出:false解1 map借助map,通过循环遍历链表结点判断map表中是否存在。存在则返回true;若递归到NULL退出循环,返回falseclass Solution {public: bool hasCycle(ListNode *head) { map<ListNode*,i原创 2021-01-24 16:37:04 · 66 阅读 · 0 评论 -
2021-1-20反转链表
题目1 反转链表示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解1 迭代法设置三个指针p1,p2,p3,初始分别指向前三个元素p2指向p1,并向后移动三个指针,直到p3指向NULL并将最后一个元素指p1.class Solution {public: ListNode* reverseList(ListNode* head) { //链表为NULL,或只有一个元原创 2021-01-20 15:59:14 · 78 阅读 · 0 评论 -
2021-1-19 删除结点 找第一个公共结点
题目1 删除链表中等于给定值 val 的所有节点。x示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5解1常规方法,遍历链表,查看要删除的结点注意!遍历时,因为链表遍历指针无法返回,所以要以遍历结点的下一个值和删除值进行判断,便于删除class Solution {public: ListNode* removeElements(ListNode* head, int原创 2021-01-19 17:31:05 · 87 阅读 · 0 评论 -
2021-1-16 回文链表
题目请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true解1 暴力解法设置一个数组,遍历链表,将所有结点存入数组设置两个变量,分别一个指向头,一个指向尾设置循环条件:i<=j,循环内部两个指针分别往后往前移动,判断是否相同即可。不同则跳出循环解2 递归遍历链表,查询链表个数设置一全局变量,标记结点pTemp,初始指向正中间的结点递归遍历head,走到正中间的结点开始返原创 2021-01-17 22:04:28 · 65 阅读 · 0 评论 -
2021-1-11删除中间节点、合并链表
题目1 实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。示例:输入:单向链表a->b->c->d->e->f中的节点c结果:不返回任何数据,但该链表变为a->b->d->e->f解 1. 结点d的值换到结点c上2. 该节点,指向原来的d结点的下一个:e结点class Solution {public: void deleteNode(ListNode* node) { L原创 2021-01-15 15:52:02 · 255 阅读 · 2 评论 -
2021-01-10 链表 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
题目1 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。解1获取链表个数循环到(总个数减k)个结点,输出class Solution {public: int kthToLast(ListNode* head, int k) { int nCount = 0; int i; ListNode* pTemp = head; while(pTemp) { nCount++原创 2021-01-11 14:19:21 · 353 阅读 · 0 评论