![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaSE
文章平均质量分 71
从0开始深度jiexiJAVA
棕旨2434
学习分享,笔记
展开
-
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 · 344 阅读 · 2 评论 -
59. 螺旋矩阵 II
59. 螺旋矩阵 II原创 2024-03-12 14:12:15 · 280 阅读 · 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 · 957 阅读 · 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 · 786 阅读 · 0 评论 -
Java奇偶链表
目录1.题目2.思路3.代码1.题目给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。奇偶链表2.思路分离节点后合并:如果链表为空,则直接返回链表。对于原始链表,每个节点都是奇数节点或偶数节点。头节点是奇数节点,头节点的后一个节点是偶数节点,相邻节点的奇偶性不同。因此可以将奇数节点和偶数节点原创 2021-12-20 12:59:21 · 501 阅读 · 0 评论 -
java 148. 排序链表
目录1.题目2.思路3.代码1.题目给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。排序链表2.思路方法一:自顶向下归并排序对链表自顶向下归并排序的过程如下。找到链表的中点,以中点为分界,将链表拆分成两个子链表。寻找链表的中点可以使用快慢指针的做法,快指针每次移动 2 步,慢指针每次移动 1 步,当快指针到达链表末尾时,慢指针指向的链表节点即为链表的中点。对两个子链表分别排序。将两个排序后的子链表合并,得到完整的排序后的链表。可以使用「21. 合并两个有序链表」的原创 2021-12-19 20:46:40 · 611 阅读 · 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 · 189 阅读 · 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 · 2117 阅读 · 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 · 923 阅读 · 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 · 273 阅读 · 0 评论 -
java面试题面试题 02.01. 移除重复节点
目录1.题目2.思路3.代码1.题目面试题 02.01. 移除重复节点。编写代码,移除未排序链表中的重复节点。保留最开始出现的节点移除重复节点2.思路哈希表我们对给定的链表进行一次遍历,并用一个哈希集合(HashSet)来存储所有出现过的节点。由于在大部分语言中,对给定的链表元素直接进行「相等」比较,实际上是对两个链表元素的地址(而不是值)进行比较。因此,我们在哈希集合中存储链表元素的值,方便直接使用等号进行比较。具体地,我们从链表的头节点head 开始进行遍历,遍历的指针记为 cur。由于头原创 2021-12-13 18:49:58 · 644 阅读 · 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 · 934 阅读 · 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 · 230 阅读 · 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 · 800 阅读 · 0 评论 -
java异常类
目录1.异常类1.1常见非受查异常类1.2常见受查异常类2.异常处理流程3.自定义异常类4.练习1.异常类顶层类 Throwable 派生出两个重要的子类, Error 和 Exception其中 Error 指的是 Java 运行时内部错误和资源耗尽错误. 应用程序不抛出此类异常. 这种内部错误一旦出现,除了告知用户并使程序终止之外, 再无能无力. 这种情况很少出现.Exception 是我们程序猿所使用的异常类的父类.其中 Exception 有一个子类称为 RuntimeException原创 2021-11-24 16:28:30 · 349 阅读 · 0 评论 -
Java String类
目录1.了解String2.定义字符串3.字符串比较4.字符串不可变1.了解String2.定义字符串 String str = "abcdef"; //调用构造方法进行构造 String str2 = new String("hello"); char[] chars = {'a', 'b', 'c'}; String str3 = new String(chars); System.out.println(str3原创 2021-11-18 20:53:01 · 226 阅读 · 0 评论 -
Java面向对象编程,包、继承、组合、多态、抽象类、接口
了解java面向对象编程,了解基本语法目录1.包2.包的访问权限控制3.继承4.protected 关键字5.final 关键字6.组合7.多态7.1向上转型7.2动态绑定7.3方法重写7.4向下转型7.5静态绑定7.6super 关键字7.7在构造方法中调用重写的方法(一个坑)1.包包 (package) 是组织类的一种方式.使用包的主要目的是保证类的唯一性.import导入包中的类import java.util.Date;public class Test { public st原创 2021-11-10 22:06:08 · 885 阅读 · 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 · 162 阅读 · 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 · 621 阅读 · 0 评论 -
java 相交链表
这里写目录标题1.题目2.分析3.完整代码1.题目相交链表:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。相交链表2.分析相交链表是Y字型,next域相同。定义两个引用pl和ps,如果每个链表相交结点前长度相同,一步一步走,直到相同就找到了相交结点。如果长度不一样,首先要长链表先走差值步,然后再一人走一步直到相遇长度不同:长度相同:首先求长度,先假设pl指向headA: ListNode原创 2021-11-07 15:03:44 · 507 阅读 · 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 · 187 阅读 · 2 评论 -
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 · 497 阅读 · 0 评论 -
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 · 200 阅读 · 1 评论 -
Java合并两个有序链表
题目:合并两个有序链表,将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。合并两个有序链表这目录1.分析2.具体步骤3.代码实现1.分析首先定义一个傀儡结点newHead,让中间结点tmp指向它,两个链表头结点headA和headB当两个表都不为空就进入循环首先就将表headA.val和headB.val进行比较,谁小谁就放在newHead的后面,然后头结点后移,tmp后移循环走完,当两个表有一个为空时,谁不为空,tmp.next就等于谁2.原创 2021-11-06 17:28:53 · 366 阅读 · 1 评论 -
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 · 189 阅读 · 0 评论 -
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 · 169 阅读 · 1 评论 -
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 · 1085 阅读 · 3 评论 -
Java顺序表
目录1.线性表2.顺序表1.线性表**线性表(linear list)**是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…2.顺序表...原创 2021-11-01 14:07:43 · 149 阅读 · 0 评论 -
Java数组,数组的应用
目录1.数组基本用法1.1 什么是数组1.2 创建数组1.3 数组的使用2. 数组作为方法的参数2.1 基本用法2.2 理解引用类型(重点/难点)2.3 认识 null2.4 初识 JVM 内存区域划分(重点)3. 数组作为方法的返回值4. 数组练习4.1 数组转字符串4.2 找数组中的最大元素4.3查找数组中指定元素(顺序查找)4.6 查找数组中指定元素(二分查找)二级目录三级目录1.数组基本用法1.1 什么是数组数组就是相同数据类型的集合。注意事项: 在 Java 中, 数组中包含的变量必须是原创 2021-10-27 17:05:55 · 307 阅读 · 0 评论 -
初识Java❤❤❤
初识Java1.主函数2.命令窗口运行java文件3.JVM,JDK,JVM3.1JDK3.2JRE3.3JVM:java虚拟机,运行java程序1.主函数public class HelloWorld{ public static void main(String[] args){ System.out.println("hello"); }}public:访问修饰限定符,private、potectedclass:关键字,用来定义类,类型【抽象的】类名称:HelloWorldJa原创 2021-10-12 18:44:56 · 355 阅读 · 8 评论 -
Java运算符
目录1.算术运算符1.1基本四则运算符1.1.1int / int 结果还是 int, 需要使用 double 来计算.0不能作除数% 表示取余, 不仅仅可以对 int 求模, 也能对 double 来求模增量赋值运算符自增/自减运算符2.关系运算符3.逻辑运算符逻辑与&&3.2逻辑或||3.3逻辑非!3.4短路求值3.5 & 和 | 不推荐使用4.位运算符4.1按位与 &4.2按位或|4.3按位取反~4.4按位异或^5.移位运算5.1左移<<:最左侧位不要了,最原创 2021-10-16 23:33:29 · 77 阅读 · 1 评论 -
Java方法,重载,递归的应用
目录1.方法的基本用法1.1 什么是方法(method)1.2 方法定义语法1.3 方法调用的执行过程1.4 实参和形参的关系(重要)1.5 没有返回值的方法2. 方法的重载2.2 使用重载2.3 重载的规则二级目录三级目1.方法的基本用法1.1 什么是方法(method)方法就是一个代码片段. 类似于 C 语言中的 “函数”.方法存在的意义(不要背, 重在体会):是能够模块化的组织代码(当代码规模比较复杂的时候).做到代码被重复使用, 一份代码可以在多个位置使用.让代码更好理解更简单.直接原创 2021-10-21 21:45:11 · 66 阅读 · 1 评论 -
Java类和对象
目录1. 类与对象的初步认知2. 类和类的实例化三级目录1. 类与对象的初步认知C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。JAVA是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。面向过程注重的是过程,在整个过程中所涉及的行为,就是功能。面向对象注重的是对象,也就是参与过程所涉及到的主体。是通过逻辑将一个个功能实现连接起来面向过程: 1.把冰箱打开 2. 把大象放入 3. 冰箱关起来 面向对象: 打开冰箱,储存,关闭都是对冰原创 2021-10-31 23:03:33 · 60 阅读 · 0 评论 -
Java数据类型和运算符
目录1.变量和类型1.1整型变量1.2长整型变量1.3双精度浮点型变量1.4单精度浮点型变量1.5字符类型变量1.6字节类型变量1.7短整型变量1.7布尔类型变量三级目录1.变量和类型变量指的是程序运行时可变的量. 相当于开辟一块内存空间来保存一些数据.类型则是对变量的种类进行了划分, 不同的类型的变量具有不同的特性。1.1整型变量int num=10; // 定义一个整型变量System.out.println(num) ;注意事项:整型变量int占4个字节,与操作系统的位数无关,ja原创 2021-10-12 23:53:07 · 354 阅读 · 3 评论