数据结构(三)之单链表反向查找

一、反向查找单链表

1、简单查找

  先遍历获取单链表单长度n,然后通过计算得到倒数第k个元素的下标为n-k,然后查找下标为n-k的元素。

2、优化查找

      先找到下标为k的元素为记录点p1,然后设置新的记录点p2的下标从0开始,同时遍历两个记录点,直到p1的值为null,p2是倒数第k个元素。

单链表结点:

package cn.edu.scau.mk;/**** @author MK* @param <T>*/
public class Node<T> {private T data;private Node<T> next = null;public Node(T data) {this.data = data;}public T getData() {return data;}public void setData(T data) {this.data = data;}public Node<T> getNext() {return next;}public void setNext(Node<T> next) {this.next = next;}}
View Code

 链表:

package cn.edu.scau.mk;import java.util.Comparator;/**** @author MK* @param <T>*/
public class LinkedList<T> {protected Node<T> head = null;/*** 添加** @param data*/public void add(T data) {//头结点为nullif (head == null) {head = new Node<>(data);return;}//寻找末结点Node<T> curNode = head;while (curNode.getNext() != null) {curNode = curNode.getNext();}curNode.setNext(new Node<>(data));//添加结点
    }/*** 删除** @param index 下标,从0开始* @return*/public boolean delete(int index) {//没有数据if (head == null) {return false;}//删除头结点if (index == 0) {head = head.getNext();}Node<T> curNode = head;int i = 1;while (curNode.getNext() != null) {if (i == index) {curNode.setNext(curNode.getNext().getNext());return true;}i++;curNode = curNode.getNext();}throw new IndexOutOfBoundsException("Index: "+index+", Size: "+i);}/*** 长度** @return*/public int length() {int len = 0;Node<T> curNode = head;while (curNode != null) {len++;curNode = curNode.getNext();}return len;}/*** 查找* @param index 位置* @return */public T get(int index) {Node<T> curNode = head;int i = 0;while (curNode != null) {if (i == index) {return curNode.getData();}i++;curNode = curNode.getNext();}throw new IndexOutOfBoundsException("Index: "+index+", Size: "+i);}/*** 排序* @param comparator 比较器*/public void sort(Comparator<T> comparator) {//没有数据if (head == null) {return;}Node<T> curNode = head;Node<T> nextNode;Node<T> minNode;while (curNode.getNext() != null) {minNode = curNode;  //默认最小结点为当前结点nextNode = curNode.getNext();  //下一个结点while (nextNode != null) {//比当前结点小,记录最小结点if(comparator.compare(curNode.getData(), nextNode.getData())>0){minNode=nextNode;}nextNode=nextNode.getNext();  //继续与下一个结点比较
            }//最小结点不是当前结点,交换数据if(minNode!=curNode){T data=curNode.getData();curNode.setData(minNode.getData());minNode.setData(data);}curNode=curNode.getNext();  //移至下一个结点
        }}/*** 打印输出*/public  void print() {Node<T> curNode = head;while (curNode!=null) {            System.out.print(curNode.getData()+" ");curNode=curNode.getNext();}System.out.println();}
}
View Code

 

二、简单查找

package cn.edu.scau.mk;import java.util.HashMap;/**** @author MK* @param <T>*/
public class OpLinkedList<T> extends LinkedList<T> {/*** 简单反向查找* @param index 倒数个数,从1开始* @return */public T getByLastIndex(int index) {//倒数个数小于1if (index < 1) {throw new IndexOutOfBoundsException("Last Index : " + index);}int len=this.length();//链表长度//倒数个数越界if (head == null||len<index) {throw new IndexOutOfBoundsException("Last Index: " + index + ", Size: " + 0);}len=len-index;//第n-k个Node<T> curNode = head;  //默认第0个for (int i = 0; i < len; i++) {          curNode = curNode.getNext();//第i+1个
        }return curNode.getData();}}

 

三、优化查找

package cn.edu.scau.mk;import java.util.HashMap;/**** @author MK* @param <T>*/
public class OpLinkedList<T> extends LinkedList<T> {/***优化反向查找* @param index 倒数个数,从1开始* @return*/public T getByLastIndex(int index) {if (index < 1) {throw new IndexOutOfBoundsException("Last Index : " + index);}if (head == null) {throw new IndexOutOfBoundsException("Last Index: " + index + ", Size: " + 0);}//查找第index个结点Node<T> curNode = head;for (int i = 0; i < index; i++) {if (curNode==null) {throw new IndexOutOfBoundsException("Last Index: " + index + ", Size: " + i);         }curNode = curNode.getNext();}//循环直到curNode为null,indexNode刚好为倒数index个   Node<T> indexNode = head;while (curNode != null) {            curNode =curNode.getNext();indexNode=indexNode.getNext();}return indexNode.getData();}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java使用:: 表达式_Java 13:切换表达式的增强功能

java使用:: 表达式您可能还记得我以前的文章&#xff0c;在Java 12中&#xff0c;传统的switch语句得到了增强&#xff0c;因此可以用作表达式。 在Java 13中&#xff0c;对该功能进行了进一步的更改 。 break语句不能再返回值。 相反&#xff0c;您必须使用新的yield语句&…

网络——Base64Encode(转:自定义Base64编码器——Base64Encode)

【0】README 0.1&#xff09; 本文source code 转自 core java volume 2 &#xff0c; 旨在了解 如何定义一个 编码器&#xff0c; 如Base64Encode &#xff1b; 0.2&#xff09;注意&#xff1a; 区别自定义的 Base64Encode 和 java.util.Base64 编码器 0.3&#xff09;fo…

数据结构(四)之单链表查找中间结点

一、查找单链表中间结点 1、简单查找 先遍历获取单链表单长度n&#xff0c;然后通过计算得到中间结点为n/2&#xff0c;然后查找下标为n/2的元素。 2、优化查找 先设置记录点fast、slow&#xff0c;下标均从0开始&#xff0c;fast走两步&#xff0c;slow走一步&#xff0c;同…

java面试常见面试问题_Java面试准备:15个Java面试问题

java面试常见面试问题并非所有的访谈都将重点放在算法和数据结构上—通常&#xff0c;访谈通常只侧重于您声称是专家的语言或技术。在此类访谈中&#xff0c;通常没有任何“陷阱”问题&#xff0c;而是它们要求您利用内存和使用该语言的经验–换句话说&#xff0c;它们测试您对…

网络——提交表单数据(post方式)

【0】README 1&#xff09; 本文文字描述 转自 core java volume 2 &#xff0c; 旨在理解 网络——提交表单数据 的基础知识 &#xff1b; 2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java-volume/tree/master/coreJavaAdvanced/cha…

html5实现最智能大气的公司年会抽奖(源码)

文章目录 1.设计来源1.1 主界面1.3 数据配置1.4 抽奖效果1.5 中奖效果 2.效果和源码配置2.1 动态效果2.2 员工信息配置2.3 奖品信息配置2.4 抽奖音效配置2.5 源代码2.6 项目结构 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/…

Linux入门(一)之权限指令系统管理

一、权限指令 普通用户需要使用sudo或者root超级管理员可以执行权限指令。 二、linux系统init程序 &#xff08;1&#xff09;运行init程序&#xff08;引用runoob.com&#xff09; init 进程是系统所有进程的起点&#xff0c;你可以把它比拟成系统所有进程的老祖宗&#xf…

java jsf_使用Java和JSF构建一个简单的CRUD应用

java jsf使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证&#xff0c;管理和保护。 今天尝试Okta。 JavaServer Faces&#xff08;JSF&#xff09;是用于构建Web应用程序的Java框架&#xff0c;其中心是作为用户…

网络——发送email(一个简单荔枝)

【0】README 1&#xff09; 本文文字描述 转自 core java volume 2 &#xff0c; 旨在理解 网络——发送email 的基础知识 &#xff1b; 2&#xff09; for souce code , please visit https://github.com/pacosonTang/core-java-volume/tree/master/coreJavaAdvanced/chapte…

算法七之希尔排序

一、希尔排序 &#xff08;1&#xff09;简介 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序&#xff0c;是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL&#xff0e;Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量…

cuba 平台_CUBA平台:TypeScript SDK和REST API

cuba 平台在本文中&#xff0c;我们将讨论已存在很长时间但尚未广为人知的CUBA平台的功能- 前端SDK生成器 &#xff0c;并了解它如何与CUBA的REST API插件一起使用 。 Java JavaScript –网络婚姻 仅八年前&#xff0c;我们Java开发人员在我们的Web应用程序中使用JavaScript作…

算法八之归并排序

一、归并排序原理 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序…

数据库编程——intro to JDBC

【0】README 1&#xff09; 本文文字描述 转自 core java volume 2 &#xff0c; 旨在理解 数据库编程——JDBC 的基础知识 &#xff1b; 2&#xff09;JDBC起源&#xff1a; 96年&#xff0c; Sun公司发布了 第一版的java 数据库连接&#xff08;JDBC&#xff09;API&#…

java \t怎么从头开始_通过这些简单的步骤从头开始学习Java

java \t怎么从头开始Java是用于软件开发的最受欢迎的编程语言之一。 无论您的最终目标或技能水平如何&#xff0c;学习和掌握Java都将为您作为开发人员打开大门。 今天&#xff0c;我们将讨论一些原因&#xff0c;我们认为您应该开始学习Java&#xff0c;然后提供有关入门的深入…

HDFS 的dao

一、HDFS dao接口package cn.mk.dao;import java.io.FileNotFoundException; import java.io.IOException;import org.apache.hadoop.fs.BlockLocation; import org.apache.hadoop.fs.FileStatus;public interface HDFSDao {public boolean mkDirs(String path) throws IOExcep…

数据库编程——JDBC 配置

【0】README 1&#xff09; 本文文字描述 转自 core java volume 2 &#xff0c; 旨在理解 数据库编程——JDBC 配置 的基础知识 &#xff1b; 2&#xff09; update timestamp: 1602022101&#xff1b; 更新内容有&#xff1a; 上传了一些图片&#xff0c; 而且举证说明了 为…

使用互联网了解的两个月里_我两个月来对Quarkus的了解

使用互联网了解的两个月里又一年&#xff0c;另一个来临&#xff0c;我很荣幸再次开启围绕Java&#xff0c;语言&#xff0c;生态系统和朋友的24篇精彩博客文章的统治&#xff0c;这些博客文章将我们所有人带入了今年最安静的假期。 这已经是第五年了&#xff08;我只错过了201…

javah导出类的头文件抛出异常——java.lang.IllegalArgumentException: Not a valid class name(原因及解决方法)

【0】README 0.1&#xff09; 本文旨在给出 java.lang.IllegalArgumentException 异常的原因 和 处理方法&#xff0c; 该异常和 javah 没有半毛钱关系 &#xff1b; 0.2&#xff09; 本文附带地给出了 javah 的作用 和 java 调用本地代码&#xff08;如 C语言&#xff09;的…

使用阿里巴巴json映射_使用JSON模式验证来映射稀疏JSON

使用阿里巴巴json映射在本文中&#xff0c;我们将探讨在创建和共享API时出现的问题。 特别是&#xff0c;需要&#xff1a; 表达数据的结构 提供对该数据的验证 允许将来改变主意 通过您拥有的部分数据与客户进行沟通 缺少数据时填写空白 人们通常使用版本编号的API解决此…

本地方法(JNI)——从java 程序中调用C函数

【0】README 1&#xff09; 本文部分文字描述 转自 core java volume 2 &#xff0c; 旨在理解 本地方法——从java 程序中调用C函数 的基础知识 &#xff1b; 2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java-volume/tree/master/co…