输出单向链表中倒数第k个结点

实现代码:

java 复制代码
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (scanner.hasNextInt()) {
            int n = scanner.nextInt();
            int[] arr = new int[n];
            for (int i = 0; i < n; i++) {
                arr[i] = scanner.nextInt();
            }
            int k = scanner.nextInt();

            // 构建链表
            ListNode head = new ListNode(arr[0]);
            ListNode current = head;
            for (int i = 1; i < n; i++) {
                current.next = new ListNode(arr[i]);
                current = current.next;
            }

            // 寻找倒数第k个节点
            ListNode result = findKthFromEnd(head, k);
            System.out.println(result.val);
        }

        scanner.close();
    }

    public static ListNode findKthFromEnd(ListNode head, int k) {
        ListNode fast = head;
        ListNode slow = head;

        // 快指针先走k步
        for (int i = 0; i < k; i++) {
            fast = fast.next;
        }

        // 快慢指针一起走,直到快指针到达末尾
        while (fast != null) {
            fast = fast.next;
            slow = slow.next;
        }

        return slow;
    }
}

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) {
        val = x;
        next = null;
    }
}
相关推荐
速易达网络5 分钟前
基于Java TCP 聊天室
java·开发语言·tcp/ip
沿着路走到底17 分钟前
JS事件循环
java·前端·javascript
爱笑的眼睛1128 分钟前
超越 `cross_val_score`:深度解析Scikit-learn交叉验证API的架构、技巧与陷阱
java·人工智能·python·ai
jianfeng_zhu1 小时前
整数数组匹配
数据结构·c++·算法
yueqingll1 小时前
032、数据结构之代码时间复杂度和空间复杂度的判断:从入门到实战
数据结构
❀͜͡傀儡师1 小时前
SpringBoot 扫码登录全流程:UUID 生成、状态轮询、授权回调详解
java·spring boot·后端
a努力。2 小时前
国家电网Java面试被问:Spring Boot Starter 制作原理
java·spring boot·面试
一 乐2 小时前
酒店预约|基于springboot + vue酒店预约系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
guslegend2 小时前
Tomact高级使用及原理剖析
java