如何利用Java输出链表中倒数第k个结点

 更新时间:2021年12月10日 10:19:47   作者:WYSCODER  
这篇文章主要给大家介绍了关于如何利用Java输出链表中倒数第k个结点的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友可以参考下

前言

链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList,其实现原理是数组。而LinkedList的实现原理就是链表了。链表在进行循环遍历时效率不高,但是插入和删除时优势明显

本文主要介绍的是输出链表中倒数第k个结点,下面来一起看看详细的介绍吧

问题描述

给你一个单链表,输出倒数第k个结点,如下图链表中,输出倒数第k个结点,比如 k = 2,输出5这个结点。

方法一

方法描述

输出倒数第k个结点就是输出整数第len - k + 1个结点,len为链表的长度。

动画演示

代码如下

/**
 * Definition for singly-linked list.
 * public class Node {
 *     int val;
 *     Node next;
 *     Node() {}
 *     Node(int val) { this.val = val; }
 *     Node(int val, Node next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    //计算链表的长度
    private int size() {
        int count = 0;
        for(Node p = head;p != null;p = p.next) {
        		count++;
        }
        return count;
    }
    //返回倒数第k个结点
    public Node outputLastIndexNode(int k) {
        //链表为空
        if (head == null) {
            return null;
        }
        
        //链表长度
        int len = size();
        //检测k值
        if(k > len || k < 0) {
              System.out.println("k值有误!!!");
        }
      
      	Node p = head;
        for(int i = 0; i < len - k; i++) {
        	  p = p.next;
        }
        return p;
}

方法二

方法描述

1)定义一个q变量指向链表的第一个结点,是q变量往后移动k个结点。

2)定义一个p变量指向链表的第一个结点。

3)p变量和q变量同时循环往后移动一个结点,直到q为null。

动画演示

代码如下

/**
 * Definition for singly-linked list.
 * public class Node {
 *     int val;
 *     Node next;
 *     Node() {}
 *     Node(int val) { this.val = val; }
 *     Node(int val, Node next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    //计算链表的长度
    private int size() {
        int count = 0;
        for(Node p = head;p != null;p = p.next) {
        		count++;
        }
        return count;
    }
    //返回倒数第k个结点
    public Node outputLastIndexNode(int k) {
        //链表为空
        if (head == null) {
            return null;
        }
        
        //链表长度
        int len = size();
        //检测k值
        if(k > len || k < 0) {
              System.out.println("k值有误!!!");
        }
      
      	Node q = head;
      	//使q往后移动k个结点
      	while(k-- > 0) {
      		q = q.next;
      	}
       	Node p = head;
       	while( q != null) {
       		q = q.next;
       		p = p.next;
        } 
		return p;	
}

总结

到此这篇关于如何利用Java输出链表中倒数第k个结点的文章就介绍到这了,更多相关Java输出链表结点内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • Java线程同步机制_动力节点Java学院整理

    Java线程同步机制_动力节点Java学院整理

    在之前,已经学习到了线程的创建和状态控制,但是每个线程之间几乎都没有什么太大的联系。可是有的时候,可能存在多个线程多同一个数据进行操作,这样,可能就会引用各种奇怪的问题。现在就来学习多线程对数据访问的控制吧
    2017-05-05
  • idea项目全局去掉严格的语法校验方式

    idea项目全局去掉严格的语法校验方式

    这篇文章主要介绍了idea项目全局去掉严格的语法校验方式,具有很好的参考价值,希望对大家有所帮助。
    2023-04-04
  • 在SpringBoot项目中使用Java8函数式接口的方法示例

    在SpringBoot项目中使用Java8函数式接口的方法示例

    在Spring Boot项目中,Java 8 的函数式接口广泛用于实现各种功能,如自定义配置、数据处理等,函数式接口在Spring Boot中非常有用,本文展示了在SpringBoot项目中使用Java8的函数式接口的方法示例,需要的朋友可以参考下
    2024-03-03
  • Java设计模式之工厂模式实现方法详解

    Java设计模式之工厂模式实现方法详解

    这篇文章主要介绍了Java设计模式之工厂模式实现方法,结合实例形式较为详细的分析了工厂模式的分类、原理、实现方法与相关注意事项,需要的朋友可以参考下
    2017-12-12
  • springboot+mybatis plus实现树形结构查询

    springboot+mybatis plus实现树形结构查询

    实际开发过程中经常需要查询节点树,根据指定节点获取子节点列表,本文主要介绍了springboot+mybatis plus实现树形结构查询,感兴趣的可以了解一下
    2021-07-07
  • 浅析Java.IO输入输出流 过滤流 buffer流和data流

    浅析Java.IO输入输出流 过滤流 buffer流和data流

    这篇文章主要介绍了Java.IO输入输出流 过滤流 buffer流和data流的相关资料,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • Java中OkHttp 超时设置的实现

    Java中OkHttp 超时设置的实现

    超时设置是网络编程中不可忽视的一部分,本文就来介绍一下Java中OkHttp 超时设置的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • Java深入讲解instanceof关键字的使用

    Java深入讲解instanceof关键字的使用

    instanceof 是 Java 的一个二元操作符,类似于 ==,>,< 等操作符。instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型
    2022-05-05
  • springboot1.X和2.X中如何解决Bean名字相同时覆盖

    springboot1.X和2.X中如何解决Bean名字相同时覆盖

    这篇文章主要介绍了springboot1.X和2.X中如何解决Bean名字相同时覆盖,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Springboot实现多文件上传代码解析

    Springboot实现多文件上传代码解析

    这篇文章主要介绍了Springboot实现多文件上传代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04

最新评论