
数据结构
MINKI_W
莽呀
展开
-
[软考冲刺]——中级软件设计师Day3
理论算法:(2 + 2 + 1) + 99 * 2 = 203ns。实际公式:(k(几段) + n - 1 ) * ▲t(流水线周期)。原创 2023-03-28 22:35:58 · 322 阅读 · 0 评论 -
如何用栈实现一个队列?
栈是先进后出,队列是先进先出,所以两个栈,一个接收数据,一个处理并返回数据,出来就是一个队列,先进先出的形式了。 如图所示: 代码实现: package com.revision.Stack; import java.util.Queue; import java.util.Stack; class Test { public static void main(String[] ...原创 2019-09-09 00:06:07 · 328 阅读 · 0 评论 -
二叉树的层序遍历
顾名思义,就是对二叉树进行一层一层的遍历,poll方法 poll() 检索并删除此列表的头(第一个元素)。 offer(E e) 将指定的元素添加为此列表的尾部(最后一个元素)。 我们可以用链表来模拟一个队列 public void levelOrder() { BiTNode<E> node =root; LinkedList<BiTNode<E>&...原创 2019-09-05 00:30:25 · 191 阅读 · 0 评论 -
删除链表中重复的结点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 思路 我们可以利用HashSet的不可重复特性,将重复的元素进行存储,再将所有出现过的元素存到另一个集合中 创建两个链表引用,一个用来删除结点(跳过重复结点),一个用...原创 2019-08-18 01:14:09 · 188 阅读 · 0 评论 -
链表分割
题目描述 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。 这个题啥意思呢? 就是输入个链表 :5-6-4-2 , x = 4 输出应该是一个新的链表,内容为:5-2-4-6 比4小的再左边,而且顺序没变,比4大的或者相等的再右边...原创 2019-08-17 22:48:41 · 151 阅读 · 0 评论 -
合并两个有序链表
题目描述: 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 想法: 递归: 首先空链表情况,都为空,返回空,一个为空就返回另一个 都不为空时,推导公式来形成递归: 当 l1.val < l2.val ...原创 2019-08-17 17:38:45 · 875 阅读 · 0 评论 -
链表中倒数第K个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点。 上手不要先写,应该先分析,画图分析。 首先判断一下,如果是个空链表呢?那么就直接return null; 非空链表的话 我们可以利用链表数组来存储这个链表的每一个结点 那么就获取了链表的下标可获取能力,然后就很简单,根据k值获取需要的结点即可。 如果,链表的长度小于给定的k值,说明需求根本无法达到,那么就return null; 下面是代码实现...原创 2019-08-17 15:44:21 · 192 阅读 · 0 评论 -
链表的中间结点
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式:[3,4,5]) 返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。 注意,我们返回了一个 ListNode 类型的对象 ans,这样: ans.val = 3, ans.next.v...原创 2019-08-17 15:21:00 · 148 阅读 · 0 评论 -
复制带随机指针的链表
题目描述 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的深拷贝 思路 建立一个旧-新-旧-新的链表模型 新结点完全copy上一个旧结点,val,next,random 打断这个结构,新结点的next指向这个完整链表的next.next即可 注意特殊情况的判断 代码 /* // Definition for a Node. cla...原创 2019-08-21 23:52:09 · 214 阅读 · 0 评论 -
重建二叉树(根据前序和中序遍历结果得到)
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路 首先通过前序遍历的结果可以得知根节点就是pre[0],然后通过根节点去在中序遍历划分左子树和右子树的范围,在根节点左边的就是左子树的值,右边则是右...原创 2019-08-19 14:26:18 · 234 阅读 · 0 评论 -
从尾到头打印链表
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。 思路: 题目要求返回的是一个ArrayList 但是ArrayList 只有尾插,如果全部插进去再遍历输出,是正序的,所以再将元素遍历插入之前,我们应该先将原链表进行一次头插,改为逆序,然后再进行ArrayList的add操作(也就是一次尾插),这样最后输出就是一个反序的ArrayList了。 代码实现 /** * ...原创 2019-08-19 13:28:25 · 159 阅读 · 0 评论 -
环形链表II
题目描述 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。 思路: 可以利用Set的特性,存储不重复,就可以存进去然后遍历,遇到重复的直接return就行 代码实现 import java.ut...原创 2019-08-18 17:53:53 · 204 阅读 · 2 评论 -
环形链表
题目描述 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 思路 利用双引用,就像同一个跑道,一个人每次跑两步,一个人每次跑一步,那么他们必定会相遇,这就是快慢指针。 代码实现 /** * Definition for singly-linked list. *...原创 2019-08-18 17:32:58 · 159 阅读 · 0 评论 -
相交链表
题目描述 编写一个程序,找到两个单链表相交的起始节点。 如图 相交结点为c1 输入AB两个链表 输出c1结点 思路 可以利用数组,将其中一个链表的所有结点引用都存进去,然后再用另一个链表进行循环判断,遇到相同的引用即说明存在交点,返回即可,注意空链表的情况。 代码实现 /** * Definition for singly-linked list. * public class ListNod...原创 2019-08-18 17:11:21 · 146 阅读 · 0 评论 -
链表的回文结构
题目描述 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 测试样例: 1->2->2->1 返回:true 思路: 分析回文结构,就是偶数位的或者单个结点的链表 可以利用栈的先进后出特性,将链表压栈,在出栈,出栈时和原链表对比,...原创 2019-08-18 16:44:54 · 149 阅读 · 0 评论