Java数据结构
文章平均质量分 63
数据结构,链表,顺序表,查找,二叉树
棕旨2434
学习分享,笔记
展开
-
59. 螺旋矩阵 II
59. 螺旋矩阵 II原创 2024-03-12 14:12:15 · 277 阅读 · 0 评论 -
java 链表两数相加
目录1.题目一2.题目二1.题目一给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果两数相加反向存放:输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912public ListNode addTwoNumbers(ListNode l1, ListNode l2) { int c原创 2021-12-20 15:16:23 · 935 阅读 · 0 评论 -
java 删除链表的中间结点
目录1.题目2.分析3.代码1.题目给你一个链表的头节点 head 。删除 链表的 中间节点 ,并返回修改后的链表的头节点 head 。删除链表的中间结点2.分析快慢指针方法,初始化为头结点head,fast一次走两步 ,slow一次走一步定义slow 的前驱结点pre,初始化为null ,slow每次走之前将pre=slow,然后slow=slow.next最后当fast=null 或者 fast.next=null时,slow就是中间结点,pre就是中间结点的前驱结点然后将pre.原创 2021-12-20 14:15:04 · 765 阅读 · 0 评论 -
Java奇偶链表
目录1.题目2.思路3.代码1.题目给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。奇偶链表2.思路分离节点后合并:如果链表为空,则直接返回链表。对于原始链表,每个节点都是奇数节点或偶数节点。头节点是奇数节点,头节点的后一个节点是偶数节点,相邻节点的奇偶性不同。因此可以将奇数节点和偶数节点原创 2021-12-20 12:59:21 · 477 阅读 · 0 评论 -
java 148. 排序链表
目录1.题目2.思路3.代码1.题目给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。排序链表2.思路方法一:自顶向下归并排序对链表自顶向下归并排序的过程如下。找到链表的中点,以中点为分界,将链表拆分成两个子链表。寻找链表的中点可以使用快慢指针的做法,快指针每次移动 2 步,慢指针每次移动 1 步,当快指针到达链表末尾时,慢指针指向的链表节点即为链表的中点。对两个子链表分别排序。将两个排序后的子链表合并,得到完整的排序后的链表。可以使用「21. 合并两个有序链表」的原创 2021-12-19 20:46:40 · 595 阅读 · 0 评论 -
java 143. 重排链表
目录1.题目2.分析3.代码1.题目重排链表2.分析注意到目标链表即为将原链表的左半端和反转后的右半端合并后的结果。这样我们的任务即可划分为三步:找到原链表的中点(快慢指针)我们可以使用迭代法实现链表的反转。将原链表的两端合并。(因为两链表长度相差不超过 11,因此直接合并即可。)合并链表:1.2. 3. 4.3.代码//143. 重排链表 //给定一个单链表 L 的头节点 head ,单链表 L 表示为: //L0 → L1 → … → Ln -原创 2021-12-17 17:21:22 · 171 阅读 · 0 评论 -
java 反转链表 II 反转从位置 left 到位置 right 的链表节点
目录1.题目2.分析3.代码1.题目给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。92. 反转链表 II2.分析主要是将left--right位置链表反转。反转之前需要将left前面和right后面断开,以left位置为头结点进行反转原来left前驱的next应该指向right位置的结点,left位置的结点的next应该是原来right位置结点的后原创 2021-12-16 22:31:06 · 1843 阅读 · 0 评论 -
Java 旋转链表,给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
目录1.题目2.思路3. 代码1.题目旋转链表:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置2.思路如果链表为空(head==null)或者链表只有头结点(head.next==null)或者向右移动次数k=0,那么都是原链表,直接返回head遍历链表求出链表长度len,注意到当向右移动的次数 k ≥ len 时,我们仅需要向右移动 k % len次即可。因为每 len次移动都会让链表变为原状。这样我们可以知道,新链表的最后一个节点为原链表的第len - k %原创 2021-12-14 23:07:03 · 904 阅读 · 0 评论 -
java 剑指 Offer 06. 从尾到头打印链表
目录1.题目2.解答2.1方法12.2方法21.题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。从尾到头打印链表2.解答2.1方法1求出链表长度len,然后创建链表长度一样大的数组,将链表的值从数组len-1位置向前存数据。public int[] reversePrint() { int len = 0;//链表长度 ListNode cur = this.head; while (cur != null) {原创 2021-12-13 22:51:15 · 271 阅读 · 0 评论 -
java面试题面试题 02.01. 移除重复节点
目录1.题目2.思路3.代码1.题目面试题 02.01. 移除重复节点。编写代码,移除未排序链表中的重复节点。保留最开始出现的节点移除重复节点2.思路哈希表我们对给定的链表进行一次遍历,并用一个哈希集合(HashSet)来存储所有出现过的节点。由于在大部分语言中,对给定的链表元素直接进行「相等」比较,实际上是对两个链表元素的地址(而不是值)进行比较。因此,我们在哈希集合中存储链表元素的值,方便直接使用等号进行比较。具体地,我们从链表的头节点head 开始进行遍历,遍历的指针记为 cur。由于头原创 2021-12-13 18:49:58 · 642 阅读 · 0 评论 -
Java之ArrayList练习题
目录题目1题目2题目3题目1某班级有若干学生,学生对象存放在一个 List 中,每个学生有姓名(String)、班级(String)、成绩(double)属性,某次考试成绩结束后每个学生都获得了成绩。遍历list集合,把所有学生的属性都打印出来。import java.util.ArrayList;import java.util.Collections;import java.util.Scanner;/** * Created with IntelliJ IDEA * Descript原创 2021-11-30 23:26:29 · 891 阅读 · 0 评论 -
Java 数据结构List之ArrayList
目录1.泛型1.1泛型的使用1.泛型1.1泛型的使用class MyArrayList<E> { private E[] elem; private int usedSize; public MyArrayList() { this.elem = (E[]) new Object[10]; } public void add(E val) { this.elem[usedSize] = val;原创 2021-11-28 21:32:22 · 226 阅读 · 0 评论 -
Java集合框架及背后的数据结构
目录1.介绍1.1类和接口总览2.接口 `interfaces`2.1Collection 常用方法说明2.2Map 常用方法说明3.实现 classes1.介绍Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces 和其实现类 classes 。1.1类和接口总览2.接口 interfacesCollection :用来存储管理一组对象 objects ,这些对象一般被成原创 2021-11-25 22:22:50 · 791 阅读 · 0 评论 -
Java环形链表 II
目录1.题目2.分析3.代码1.题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。环形链表 II说明:不允许修改给定的链表。2.分析定义两个引用:fast和slow,开始fast走的速度为slow的两倍,3.代码 //给定一个链表,返回链表开始入环原创 2021-11-07 16:47:52 · 138 阅读 · 0 评论 -
Java环形链表
目录1.题目2.分析3.代码1.题目环形链表:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。环形链表2.分析当fast!=null和fast.next!=null,fast就走两步,slow就走一步,每次走完就比较,相等原创 2021-11-07 15:58:25 · 613 阅读 · 0 评论 -
java 相交链表
这里写目录标题1.题目2.分析3.完整代码1.题目相交链表:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。相交链表2.分析相交链表是Y字型,next域相同。定义两个引用pl和ps,如果每个链表相交结点前长度相同,一步一步走,直到相同就找到了相交结点。如果长度不一样,首先要长链表先走差值步,然后再一人走一步直到相遇长度不同:长度相同:首先求长度,先假设pl指向headA: ListNode原创 2021-11-07 15:03:44 · 495 阅读 · 3 评论 -
Java链表的回文结构
目录1.题目2.分析3.代码1.题目链表的回文结构:对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。2.分析创建两个引用,找到中间结点。最好从中间位置向后反转,然后判断回文奇数个结点:1.7.偶数个结点:1.3.3.代码 //判断回文 public boolean chkP原创 2021-11-07 13:39:07 · 181 阅读 · 2 评论 -
Java链表中倒数第k个结点
题目:输入一个链表,输出该链表中倒数第k个结点。链表中倒数第k个结点目录1.分析2.具体步骤3.代码1.分析遍历单链表一遍就能知道倒数第k个结点让fast和slow指向head首先让fast走k-1步,然后slow和fast一人一步走,当fast.next=null的时候,slow所指的位置就是倒数第k个结点的位置。2.具体步骤但是对于k值有要求,k必须大于0且小于等于链表长度链表长度怎么求呢?画图演示:3.代码//链表中倒数第k个结点 public ListNode原创 2021-11-06 16:12:28 · 170 阅读 · 0 评论 -
Java顺序表
目录1.线性表2.顺序表1.线性表**线性表(linear list)**是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…2.顺序表...原创 2021-11-01 14:07:43 · 145 阅读 · 0 评论 -
Java无头单向非循环链表实现
目录1.链表2.无头单向非循环链表3.创建链表4.遍历链表5.功能列表5.1查找是否包含关键字key是否在单链表当中5.2得到单链表的长度5.3头插法5.4尾插法5.5任意位置插入,第一个数据节点为0号下标5.6删除第一次出现关键字为key的节点5.7删除所有值为key的节点5.8清空链表1.链表链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。链表种类:2.无头单向非循环链表结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈原创 2021-11-03 00:16:06 · 326 阅读 · 2 评论 -
Java反转链表
**反转链表:**不修改每个结点,修改每个结点的指向。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。反转链表目录1.思想2.具体步骤3.代码1.思想判断链表是否为空,为空就返回null不为空定义结点cur指向链表头结点,定义前驱结点prev为空,只要当cur!=null时候就进入循环,每次将ListNode curNext = cur.next;然后将cur指向其前驱结点prev;然后前驱结点后移使prev=cur;最后cur=curNext;2.具体步骤3.代码原创 2021-11-06 14:30:07 · 1077 阅读 · 3 评论 -
java删除链表中重复的结点
目录1.题目2.分析3.具体步骤4.代码1.题目删除链表中重复的结点,在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5链表删除重复结点2.分析重复的节点不止一个;排好序,又有重复的结点,那么结点肯定挨着的。、定义cur指向头结点;定义一个中间结点newHead,定义一个引用tmp指向这个节点,所有不重复的结点就挂在这个节原创 2021-11-06 20:48:09 · 485 阅读 · 0 评论 -
Java合并两个有序链表
题目:合并两个有序链表,将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。合并两个有序链表这目录1.分析2.具体步骤3.代码实现1.分析首先定义一个傀儡结点newHead,让中间结点tmp指向它,两个链表头结点headA和headB当两个表都不为空就进入循环首先就将表headA.val和headB.val进行比较,谁小谁就放在newHead的后面,然后头结点后移,tmp后移循环走完,当两个表有一个为空时,谁不为空,tmp.next就等于谁2.原创 2021-11-06 17:28:53 · 362 阅读 · 1 评论 -
Java链表分割
题目:现有一链表的头指针 ListNode pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。*链表分割目录1.分析2.具体步骤3.代码1.分析首先将链表分为前后两段,分割前,分割后定义4个引用 ListNode bs = null; ListNode be = null; ListNode as = null; ListNode ae = null;原创 2021-11-06 18:48:21 · 193 阅读 · 1 评论 -
java链表的中间结点
题目:链表的中间结点,给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。链表中间节点目录1.分析2.具体步骤1.分析遍历单链表一遍,定义两个引用fast和slow;fast表示数度是slow的两倍,最后一个到结尾,一个就到中间位置了。fast一次走两步,slow一次走一步。首先判断head是否为空定义两个引用fast和slow都指向头结点因为fast一次走两步,所以要判断fast和fast.next是否为空,并且fast必须写在前面,因原创 2021-11-06 15:04:21 · 163 阅读 · 1 评论