![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
黄胶鞋和七分裤
为恶畏人知,恶中犹有善路,为善而急人知,善处即是恶根
展开
-
LeetCode 的 C++ 实现(十一)移除链表元素
题目描述删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5哨兵节点 ListNode* removeElements(ListNode* head, int val) { ListNode* dummy = new ListNode(0); dummy->next = head; ListN原创 2020-05-12 23:34:22 · 205 阅读 · 0 评论 -
LeetCode 的 C++ 实现(十)删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。暴力解法class Solution {public: ListNode* removeNthFromEnd(...原创 2020-04-25 23:04:59 · 190 阅读 · 0 评论 -
LeetCode 的 C++ 实现(九)合并两个有序链表
题目将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4非递归ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* Dum...原创 2020-02-17 22:58:29 · 179 阅读 · 0 评论 -
LeetCode 的 C++ 实现(八)两数之和(二)
题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8...原创 2019-11-25 23:18:31 · 120 阅读 · 0 评论 -
LeetCode 的 C++ 实现(八)两数之和
题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]暴力解法c...原创 2019-10-21 23:49:32 · 155 阅读 · 0 评论 -
LeetCode 的 C++ 实现(六)环形链表 ,判断环是否存在
题目给定一个链表,判断链表中是否有环。快慢指针/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution ...原创 2019-10-21 15:02:56 · 209 阅读 · 0 评论 -
LeetCode 的 C++ 实现(七)环形链表(2) ,判断环是否存在,同时找到入口
题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。Floyd算法思路1、通过快慢指针来判断是否存在环2、入环前的距离是F,第一次点h,以该点将环分割,两段分别距离分别为a 和 b。可以得到公式:2(F + a) = F + N(a + b) + a2F + 2a = F + 2a + b + (N - 1)(a + b)F = b + (N - 1...原创 2019-10-21 14:52:54 · 189 阅读 · 0 评论 -
LeetCode 的 C++ 实现(五)链表逆序
题目将给定的单链表L: L 0→L 1→…→L n-1→L n,重新排序为: L 0→L n →L 1→L n-1→L 2→L n-2→…要求使用原地算法,并且不改变节点的值例如:对于给定的单链表{1,2,3,4},将其重新排序为{1,4,2,3}.Given a singly linked list L: L 0→L 1→…→L n-1→L n,reorder it to: L 0...原创 2019-10-20 23:51:39 · 159 阅读 · 0 评论 -
LeetCode 的 C++ 实现(四)插入排序对链表进行排序的各类实现
题目使用插入排序对链表进行排序。Sort a linked list using insertion sort.基础插入排序/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x),...原创 2019-10-20 22:49:18 · 104 阅读 · 0 评论 -
LeetCode 的 C++ 实现(三)链表排序(要求空间复杂度和时间复杂度)
题目在O(n log n)的时间内使用常数级空间复杂度对链表进行排序。Sort a linked list in O(n log n) time using constant space complexity.思路由于题目要求空间复杂度是 O(1),因此不能使用递归。因此这里使用 bottom-to-up 的算法来解决。bottom-to-up 的归并思路是这样的:先两个两个的 merg...原创 2019-10-20 15:37:55 · 393 阅读 · 0 评论 -
LeetCode 的 C++ 实现(二) 逆波兰式(后缀表达式求解)
解题思路根据后缀表达式概念,借助栈,不断将字符入栈,当碰到当前字符是运算符,就将已入栈的左右数值弹出,求得结果后,将结果入栈class Solution {public: int evalRPN(vector<string> &tokens) { if(tokens.size() == 0) return 0; ...原创 2019-10-17 00:22:19 · 166 阅读 · 0 评论 -
LeetCode 的 C++ 实现(一) :求给定二叉树的最小深度,最小深度是指树的根节点到最近叶子结点的最短路径上的数量
题目描述求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf...原创 2019-10-16 11:10:43 · 517 阅读 · 0 评论