数据机构与算法
文章平均质量分 54
pluto_rx
蒟蒻
展开
-
707)设计链表
leetcode 707设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点.转载 2021-04-18 21:33:48 · 71 阅读 · 0 评论 -
404)左叶子之和(复习二叉树的四种遍历)
leetcode上看到一道题,计算给定的二叉树的所有左叶子之和在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24在做这个题之前,准备复习回顾一下二叉树的几种遍历方法。二叉树的遍历二叉树的遍历,是从根节点出发,按照某种规则访问树中的所有结点。四种遍历方法:前序遍历中序遍历后序遍历层序遍历二叉树树的创建首先创建一个结构体:struct TreeNode { int val; TreeNode *left; TreeNode *righ原创 2021-04-07 20:43:48 · 192 阅读 · 0 评论 -
516)最长回文子序列
https://leetcode-cn.com/problems/longest-palindromic-subsequence/dp动态规划回文子序列:字符串中能构成回文的字符串,不同于字串,可以在顺序不变的情况下将元素提取出来使能构成回文,即我们可以删除某些字符来让某部分字串处于回文题目:给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。例如输入“bbbab”输出:4一个可能的最长回文子序列为 “bbbb”。输入:“.原创 2021-04-05 21:20:11 · 86 阅读 · 0 评论 -
143)重排链表
https://leetcode-cn.com/problems/reorder-list/快慢指针、链表反转、合并题目描述:给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。分析:单链表,重排后第一个与最后一个,交叉排列,可以想到将链表反转。刚开始设想的是复制一份原链表将其反转为5->4->3->2->1然后在合并前一半部分。.原创 2021-04-05 20:44:53 · 132 阅读 · 0 评论 -
链表的快慢指针
参考:https://www.jianshu.com/p/21b4b8d7d31b快慢指针:定义两根指针,移动速度一快一慢,制造一个差值,利用这个差值来找到链表上相应的节点。找中间值:定义两个指针a,b。我们假设b的速度是a的两倍,a,b一起跑,那么在b遍历完链表后,a所在的位置就是链表的中间节点。如下:判断链表中是否有环:设置两个不同速度的指针,如果在某个时刻,两指针相遇,那么链表中就存在环。删除倒数第n个节点就相当于要找出待删除元素前一个元素,为第n-1个节点。首先让fast指.原创 2021-04-04 20:26:58 · 98 阅读 · 0 评论 -
两数相加
**两数相加:**给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。知识点:链表遍历,三元运算符(?),判断进位,判断结束条件code:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNo原创 2021-04-01 22:12:34 · 63 阅读 · 0 评论 -
单向链表的逆向遍历与反转
单向链接逆向遍历单向链表顺序遍历很方便,那么逆向遍历呢首先定义一个链表,然后将其反向输出。结构体定义如下:struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};将链表反向输出,其过程分解就是先入后出,于是我们想到了一种类似的结构,栈方法,使用栈。头文件 :#include <stack>#include &原创 2021-04-01 20:28:42 · 1813 阅读 · 0 评论