Java输出链表倒数第k个节点

yizhihongxing

下面是Java输出链表倒数第k个节点的完整攻略:

  1. 理解题意意义:输入一个链表,输出该链表中倒数第k个节点的值。

  2. 考虑边界条件:输入的链表为空或k不能大于链表长度。

  3. 定义两个指针,分别指向链表头部。让其中一个从0开始,先走k步,另一个开始走。然后两个指针同步走,直到其中一个到达链表尾部。另一个指针此时就是链表倒数第k个节点。

  4. 编写代码:

public ListNode findKthToTail(ListNode head, int k) {
    if(head == null || k <= 0) {
        return null;
    }
    ListNode pNode1 = head;
    ListNode pNode2 = head;
    for(int i = 0; i < k-1; i++) {
        if(pNode1.next != null) {
            pNode1 = pNode1.next;
        } else {
            return null;
        }
    }
    while(pNode1.next != null) {
        pNode1 = pNode1.next;
        pNode2 = pNode2.next;
    }
    return pNode2;
}
  1. 测试代码:
public void test() {
    int[] dataArray = {1, 2, 3, 4, 5};
    ListNode head = createLinkedList(dataArray);
    ListNode kthListNode = findKthToTail(head, 3);
    System.out.println(kthListNode.val); // 3
}
private static ListNode createLinkedList(int[] dataArray) {
    ListNode head = new ListNode(-1);
    ListNode p = head;
    for (int i = 0; i < dataArray.length; i++) {
        p.next = new ListNode(dataArray[i]);
        p = p.next;
    }
    return head.next;
}
  1. 示例1:输入链表 null,k=3,期望输出 null
int[] dataArray = {};
ListNode head = createLinkedList(dataArray);
ListNode kthListNode = findKthToTail(head, 3);
System.out.println(kthListNode); // null
  1. 示例2:输入链表 1->2->3->4->5,k=3,期望输出 3
int[] dataArray = {1, 2, 3, 4, 5};
ListNode head = createLinkedList(dataArray);
ListNode kthListNode = findKthToTail(head, 3);
System.out.println(kthListNode.val); // 3

以上就是Java输出链表倒数第k个节点的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java输出链表倒数第k个节点 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 在本地用idea连接虚拟机上的hbase集群的实现代码

    下面是在本地用idea连接虚拟机上的hbase集群的实现代码的完整攻略。 连接HBase集群 准备工作 安装HBase 安装Zookeeper 开启HBase和Zookeeper服务 在IDEA中配置HBase插件 下载Intellij IDEA插件 HBase Integration 安装后重启IDEA 在IDEA的Settings -> Other…

    Java 2023年5月19日
    00
  • Java如何使用httpclient检测url状态及链接是否能打开

    下面是Java如何使用httpclient检测url状态及链接是否能打开的完整攻略。 1. 概述 在Java中,我们可以使用Apache HttpClient库来实现检测URL状态以及链接能否打开的功能,在使用HttpClient进行URL检测之前,需要导入相关的包和依赖,具体可以在Maven或者Gradle中添加以下依赖: <!–HttpClien…

    Java 2023年5月19日
    00
  • MyBatis的9种动态标签详解

    MyBatis的9种动态标签详解 在使用MyBatis进行数据库操作时,动态SQL是一个经常用到的特性。MyBatis提供了9种动态标签,分别是<if>、<choose>、<when>、<otherwise>、<trim>、<where>、<set>、<foreach&…

    Java 2023年5月19日
    00
  • 使用java数组 封装自己的数组操作示例

    使用Java数组,封装自己的数组操作是Java开发中比较常见的任务,本攻略将为您提供两个示例来说明如何封装自己的数组操作。 1. 实现数组反转的方法 在编写Java程序时,我们经常需要将数组进行反转。封装一个数组反转的方法是很有必要的。下面是一个代码示例: public static int[] reverse(int[] array){ int[] res…

    Java 2023年5月26日
    00
  • Java Runtime Environment怎么安装 JRE安装详细图文教程

    Java Runtime Environment怎么安装 JRE安装详细图文教程 什么是Java Runtime Environment Java Runtime Environment (JRE)是一个程序开发环境,它由包含Java运行时所需的库和系统组件的集合组成。JRE允许用户在电脑上运行Java编写的程序和Applet。 安装Java Runtime…

    Java 2023年5月26日
    00
  • EJB 3.0 开发指南之定时服务

    EJB 3.0 开发指南之定时服务 什么是定时服务? 定时服务是一种可以按照预定时间自动执行的任务服务,可以定时发送邮件、清理垃圾数据等操作。在 Java EE 中,可以使用 EJB(Enterprise JavaBeans)实现定时任务。 实现定时服务的步骤 创建 EJB 在 Java EE 项目中,首先需要创建一个 EJB,这个 EJB 将被用来实现定时…

    Java 2023年6月15日
    00
  • SpringBoot加密配置文件的SQL账号密码方式

    下面是详细讲解SpringBoot加密配置文件的SQL账号密码方式的完整攻略: 什么是SpringBoot加密配置文件的SQL账号密码方式 在SpringBoot项目中使用外部配置文件保存敏感信息(如数据库账号密码)时,为了防止泄露,需要对这些信息进行加密处理。SpringBoot提供了多种加密方式,其中之一就是通过SQL账号密码方式。 具体而言,就是将配置…

    Java 2023年5月27日
    00
  • JSP加载JS文件不起作用的有效解决方法

    下面是关于“JSP加载JS文件不起作用的有效解决方法”的完整攻略: 问题背景 在JSP中使用JavaScript是非常常见的,但是有时候我们可能会遇到这样的问题:在JSP中引用的JS文件并没有起作用,也就是说JS代码没有被执行。这种情况下我们该怎么解决呢? 解决方法 具体的方法是在JSP文件中使用<script>标签引入JS文件时,要注意添加ty…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部