数据结构
文章平均质量分 92
练习数据结构的知识
叶落闲庭
驾驭命运的舵是奋斗。不抱有幻想,不放弃一点机会,不停止一日努力。
展开
-
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
我的思路是先求出整个链表的长度,要删除倒数第n个节点,则将链表的长度减去n得到要删除的节点的前一个节点的索引,将链表长度减n+1得到要删除的节点的索引,定义两个指针,一个指针表示要删节点的前一个节点,另一个表示要删的节点,根据两个索引值对链表进行遍历,遍历索引值减1次就能得到索引对应的节点处,然后将要删节点的前一个节点的next指向要删的节点的next,完成倒数第n个节点的删除,当要删除的是第一个节点时(即删除倒数第链表长度个节点),直接改变头节点的位置即可。原创 2023-10-24 21:28:40 · 84 阅读 · 0 评论 -
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
创建Map集合,遍历数组,根据当前数字作为键的参数拿到集合中的值count,再判断这个count值是否为空,若为空,则默认这个值为1,将其和当前数字添加到Map集合中,若不为空,则这个值自增1,表示第二次出现这个数字,再将其和当前数字添加到Map集合中,覆盖之前的键值对,当遍历完这个数组后,再对Map集合进行遍历,根据数字作为键的参数得到它所出现的次数,判断这个此时是否等于1,若等于1,即表示当前数字只出现了一次,返回这个数字即可。原创 2023-10-23 21:31:49 · 146 阅读 · 0 评论 -
【力扣刷题】二叉树的中序遍历、二叉树的最大深度、翻转二叉树、对称二叉树
二叉树不为空,则定义一个栈,用来实现二叉树的中序遍历,定义一个节点指针cur,表示当前节点,当cur不为空或者栈不为空时,进入循环,在循环内再嵌套一个条件为cur不为空的循环,在嵌套的循环中将当前节点加入到栈中,并将当前节点指向当前节点的左子节点,直到将所有的左子节点均添加到栈中,内嵌循环结束,外部循环继续执行,将此时的栈顶元素弹出,并将弹出的节点值加入到集合中,将cur指向弹出的栈顶元素的右子节点,循环遍历,直到栈为空时退出循环,返回集合。原创 2023-10-22 20:51:19 · 101 阅读 · 0 评论 -
【力扣刷题】数组实现栈、后缀表达式(逆波兰表达式)求值、中缀表达式转换为后缀表达式(无括号&&有括号)
用数组来实现栈的方法相对比较简单,首先定义一个数组,用来模拟栈的功能,定义一个整型变量作为栈顶指针(`int top`),为这个数组栈定义一个带形参的构造方法,参数表示数组的默认长度(`int capacity`),即栈的容量。原创 2023-10-21 20:39:51 · 154 阅读 · 0 评论 -
【数据结构】单链表代码实现
链表为空:返回空链表非空:定义一个节点变量指向头,再通过这个变量遍历链表,当当前节点的下一个节点为空时,表示此节点为最后一个节点,返回当前节点/*** 找最后一个节点* @return 返回最后一个节点*/= null) {原创 2023-10-06 16:20:31 · 103 阅读 · 0 评论 -
【数据结构】HashSet的底层数据结构
在哈希表中,最重要的是哈希值,哈希值就是对象的整数表现形式,HashSet 在存数据的时候,会根据数组长度和哈希值计算出要存入的位置,哈希值是根据hashCode()方法计算出来的int型的整数,hashCode()方法定义在Object类中,所有对象都可以调用,默认使用地址值进行计算,一般情况下,自定义的对象都要重写hashCode()方法,利用对象内部的属性值计算哈希值。原创 2023-10-03 11:11:14 · 2216 阅读 · 0 评论 -
Arrays的用法(常见方法的使用)
默认把0索引的数据当做是有序的序列,1索引到最后认为是无序的序列通历无序的序列得到里面的每一个元素,假设当前遍历得到的元素是A元素把A往有序序列中进行插入,在插入的时候,是利用二分查找确定A元素的插入点* 拿着A元素,跟插入点的元素进行比较,比较的规则就是`compare`方法的方法体如果方法的返回值是负数,拿着A继续跟前面的数据进行比较如果方法的返回值是正数,拿着A继续跟后面的数据进行比较如果方法的返回值是0,也拿着A跟后面的数据进行比较原创 2023-09-24 15:22:49 · 109 阅读 · 0 评论 -
Java数据结构 -- 常见算法分析(查找算法、排序算法)精解详解!!!
本文主要讲了常见的查找算法和排序算法,内容通俗易懂,相信各位小伙伴定会有一定的收获原创 2023-07-16 08:09:05 · 473 阅读 · 5 评论 -
JAVA数据结构刷题 -- 二叉树进阶
这道题目用到了队列,因为返回值时集合,需要创建一个集合,当二叉树为空时,返回一个空的集合,二叉树不为空,将当前的根节点加入到队列中,当队列不为空时,弹出队头结点并记录他的值,判断对头的左子节点和右子节点是否存在,若存在就加入到队列中进行循环,直到队列为空,循环结束,每次都在0下标位置向集合中添加结点,最后返回集合。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)原创 2023-07-12 14:24:10 · 79 阅读 · 1 评论 -
什么是堆,优先级队列的模拟实现
优先队列也是一种抽象数据类型。优先队列中的每个元素都有优先级,而优先级高(或者低)的将会先出队,而优先级相同的则按照其在优先队列中的顺序依次出队。也就是说优先队列,通常会有下面的操作:将元素插入队列将最大或者最小元素删除这样的话,我们完全可以使用链表来实现,例如以O(1)复杂度插入,每次在表头插入,而以O(N)复杂度执行删除最小元素;或者以O(N)复杂度插入,保持链表有序,而以O(1)复杂度删除。然而优先队列往往使用堆来实现,以至于通常说堆时,就自然而然地想到了优先队列。原创 2023-07-14 17:54:13 · 67 阅读 · 1 评论 -
JAVA数据结构刷题 -- 力扣二叉树
有好长一段时间没有更新博客了,本来想着在学校边上课边整理博客,奈何学校的事实在是太多了,在考试前还一直坚持每天提交gitee,确保自己不会荒废了光阴,争取这个暑假持续学习并更新博客,期待这一个暑假的沉淀!!!原创 2023-07-06 18:12:41 · 79 阅读 · 1 评论