链表算法:

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链表的常用算法原理相关推荐

  1. scikit-learn机器学习常用算法原理及编程实战(五)

    决策树 决策树是最经典的机器学习模型之一.预测速度快,可以处理类别型数据和连续型数据.通过本章读者可以掌握以下内容: 信息熵及信息增益的概念,以及决策树的分裂的原则: 决策树的创建及剪枝算法: sci ...

  2. java语言实现常用算法(排序和查找)

    以下是java语言实现的常用算法. 1.冒泡排序 /** 冒泡排序* * 有1至N个数* 第一轮比较N个数,第二轮比较N-1个数,...* 每一轮根据前面一个数和后面一个数比较,如果前者大于后者,交换 ...

  3. java 笛卡尔积_Java笛卡尔积算法原理与实现方法详解

    本文实例讲述了Java笛卡尔积算法原理与实现方法.分享给大家供大家参考,具体如下: 笛卡尔积算法的Java实现: (1)循环内,每次只有一列向下移一个单元格,就是CounterIndex指向的那列. ...

  4. java dbscan_聚类(DBSCAN)算法原理

    DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法,和 K- ...

  5. Java之一致性hash算法原理及实现

    为什么80%的码农都做不了架构师?>>>    一致性哈希算法是分布式系统中常用的算法. 比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映 ...

  6. JAVA虚拟机垃圾回收算法原理

    除了释放不再被引用的对象外,垃圾收集器还要处理堆碎块.新的对象分配了空间,不再被引用的对象被释放,所以堆内存的空闲位置介于活动的对象之间.请求分配新对象时可能不得不增大堆空间的大小,虽然可以使用的总空 ...

  7. 机器学习常用算法原理及优缺点

    KNN 核心思想是: 物以类聚,人以群分 根据两点距离公式,计算距离,选择距离最小的前k个点,并返回分类结果. 假设一个未知样本数据x需要归类,总共有ABC三个类别,那么离x距离最近的有k个邻居,这k ...

  8. 数据挖掘常用算法原理

    作为一个统计出身的数据人,学习机器学习更要学习原理.对于数学原理透彻理解,不论是模型优化还是参数调整都将是一个很好的理论功底.在此参照网上一篇理论博文,再学习理解一遍. 常见机器学习算法(主要是一些常 ...

  9. 数据压缩的历史、常用算法原理

    压缩,是为了减少存储空间而把数据转换成比原始格式更紧凑形式的过程.数据压缩的概念相当古老,可以追溯到发明了摩尔斯码的19世纪中期. 摩尔斯码的发明,是为了使电报员能够通过电报系统,利用一系列可听到的脉 ...

  10. JAVA简单选择排序算法原理及实现

    简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...

最新文章

  1. miniui列表下拉允许编辑且保存_办公小技巧:请个好用的文本代码编辑器
  2. sql left join用法_图解 SQL 中 JOIN 的各种用法
  3. 解决vue的所有相关问题集合
  4. CUDNN学习笔记(1)
  5. DRL实战 : Dynamic Programming
  6. mysql视图高峰事务_MySQL-视图与事务「程序员培养之路第二十六天」
  7. 小米9008授权账号_小米AI音箱APP的秘密
  8. CentOS7版本下载地址发布 附正确下载CentOS各个版本镜像
  9. Minidwep-gtk字典 破 WPA
  10. 同步AOKP源码的方法
  11. PubWin不知道密码情况下卸载
  12. 机器学习/深度学习资源下载合集(持续更新...)
  13. CTF|pwn栈溢出入门题level3解题思路及个人总结
  14. 最严谨的计算机语言p,一款全新的 高级PLC编程语言 P语言 简介-专业自动化论坛-中国工控网论坛...
  15. 证明HashSet不是线程安全
  16. 论文速读之QUALITY-GATED CONVOLUTIONAL LSTM FOR ENHANCING COMPRESSED VIDEO
  17. GX、LS型螺旋输送机结构新颖 噪声低
  18. 银饰设计师Vicky与场景应用的故事
  19. TQ2440 使用Jlink-Flasher 烧写 u-boot 或者 program
  20. 搜卡之家:关于移动物联卡和电信物联卡的优劣势对比

热门文章

  1. Grails Quartz插件 定时调度任务
  2. Windows下Node_OneBot配置方法
  3. Unlocker使用
  4. 计算机作曲常用软件,计算机作曲——软件与音源的选择
  5. 数据挖掘导论课后习题答案 第二章(一)
  6. phpStudy启动失败时的解决方法 提示缺vc9运行库
  7. keepalived(二)vip漂移
  8. 2022最新软件库iApp源码+简约唯美/对接hybbs
  9. matlab中的语言,把c语言变成matlab语言,可以在matlab中运行。
  10. python ocr 识别 开源_OCR识别-python版(一)