Java链表的常用算法原理
链表算法:
1.给定一个链表,但是不知道链表大小,要求遍历一次,找到链表的中间位置
方法:快慢指针法
定义两个指针都指向head节点,fast指针每次移动两步,slow指针每次移动一步,当fast不能再往后走时,slow此时指向的是中间值
代码:
//找到链表的中间值public Node findMid() {//定义快指针fastNode fast = head;//定义慢指针slowNode slow = head;while ((fast != null)&&(fast.next!=null)) {fast = fast.next.next;slow = slow.next;}return slow;}
2.判断一个链表是否有环
方法:Floyd环判定算法
定义快慢两个指针,一直执行移动下去,如果两个指针在某点重合说明有环
代码:
//查询链表是否成环public boolean HashCycle() {//定义快指针fastNode fast = head;//定义慢指针slowNode slow = head;while ((fast != null)&&(fast.next!=null)) {fast = fast.next.next;slow = slow.next;if (fast == slow) {return true;}}return false;}
3、判断一个链表是否有环,并找到成环的起始位置
方法:让一个指针指向链表起点,另一个指针留在第一次相遇的结点处,两个指针每次都只走一步,当再次相遇时。就是成环位置
代码:
//找到成环的位置public void HashCycle1() {//定义快指针fastNode fast = head;//定义慢指针slowNode slow = head;while ((fast != null)&&(fast.next!=null)) {fast = fast.next.next;slow = slow.next;if (fast == slow) {slow = head;while (slow !=fast) {fast = fast.next;slow = slow.next;}System.out.println(slow.val);return;}}}
4.在原链表上翻转
方法:两个指针:一个指向当前head节点的前一个位置,一个指向head节点的后一个位置
代码:
//链表的翻转public void fanzhuan() {Node pre = null;Node next = null;while (head!=null) {next = head.next;head.next = pre;head = next;}head = pre;}
5.截取出单链表的后k个结点
方法:一开始fast和slow就相隔k个结点然后逐次移动,当fast指向null时,slow指向的就是后k个节点的开始位置
代码:
//截取后k个结点,此处设k为2public void NthFromEnd(int k) {Node fast = head;//定义快指针fastwhile (--k>0) {fast = fast.next;}//定义慢指针slowNode slow = head;while ((fast != null)&&(fast.next!=null)) {fast = fast.next;slow = slow.next;}head = slow;return;}
Java链表的常用算法原理相关推荐
- scikit-learn机器学习常用算法原理及编程实战(五)
决策树 决策树是最经典的机器学习模型之一.预测速度快,可以处理类别型数据和连续型数据.通过本章读者可以掌握以下内容: 信息熵及信息增益的概念,以及决策树的分裂的原则: 决策树的创建及剪枝算法: sci ...
- java语言实现常用算法(排序和查找)
以下是java语言实现的常用算法. 1.冒泡排序 /** 冒泡排序* * 有1至N个数* 第一轮比较N个数,第二轮比较N-1个数,...* 每一轮根据前面一个数和后面一个数比较,如果前者大于后者,交换 ...
- java 笛卡尔积_Java笛卡尔积算法原理与实现方法详解
本文实例讲述了Java笛卡尔积算法原理与实现方法.分享给大家供大家参考,具体如下: 笛卡尔积算法的Java实现: (1)循环内,每次只有一列向下移一个单元格,就是CounterIndex指向的那列. ...
- java dbscan_聚类(DBSCAN)算法原理
DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法,和 K- ...
- Java之一致性hash算法原理及实现
为什么80%的码农都做不了架构师?>>> 一致性哈希算法是分布式系统中常用的算法. 比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映 ...
- JAVA虚拟机垃圾回收算法原理
除了释放不再被引用的对象外,垃圾收集器还要处理堆碎块.新的对象分配了空间,不再被引用的对象被释放,所以堆内存的空闲位置介于活动的对象之间.请求分配新对象时可能不得不增大堆空间的大小,虽然可以使用的总空 ...
- 机器学习常用算法原理及优缺点
KNN 核心思想是: 物以类聚,人以群分 根据两点距离公式,计算距离,选择距离最小的前k个点,并返回分类结果. 假设一个未知样本数据x需要归类,总共有ABC三个类别,那么离x距离最近的有k个邻居,这k ...
- 数据挖掘常用算法原理
作为一个统计出身的数据人,学习机器学习更要学习原理.对于数学原理透彻理解,不论是模型优化还是参数调整都将是一个很好的理论功底.在此参照网上一篇理论博文,再学习理解一遍. 常见机器学习算法(主要是一些常 ...
- 数据压缩的历史、常用算法原理
压缩,是为了减少存储空间而把数据转换成比原始格式更紧凑形式的过程.数据压缩的概念相当古老,可以追溯到发明了摩尔斯码的19世纪中期. 摩尔斯码的发明,是为了使电报员能够通过电报系统,利用一系列可听到的脉 ...
- JAVA简单选择排序算法原理及实现
简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...
最新文章
- miniui列表下拉允许编辑且保存_办公小技巧:请个好用的文本代码编辑器
- sql left join用法_图解 SQL 中 JOIN 的各种用法
- 解决vue的所有相关问题集合
- CUDNN学习笔记(1)
- DRL实战 : Dynamic Programming
- mysql视图高峰事务_MySQL-视图与事务「程序员培养之路第二十六天」
- 小米9008授权账号_小米AI音箱APP的秘密
- CentOS7版本下载地址发布 附正确下载CentOS各个版本镜像
- Minidwep-gtk字典 破 WPA
- 同步AOKP源码的方法
- PubWin不知道密码情况下卸载
- 机器学习/深度学习资源下载合集(持续更新...)
- CTF|pwn栈溢出入门题level3解题思路及个人总结
- 最严谨的计算机语言p,一款全新的 高级PLC编程语言 P语言 简介-专业自动化论坛-中国工控网论坛...
- 证明HashSet不是线程安全
- 论文速读之QUALITY-GATED CONVOLUTIONAL LSTM FOR ENHANCING COMPRESSED VIDEO
- GX、LS型螺旋输送机结构新颖 噪声低
- 银饰设计师Vicky与场景应用的故事
- TQ2440 使用Jlink-Flasher 烧写 u-boot 或者 program
- 搜卡之家:关于移动物联卡和电信物联卡的优劣势对比