输出单向链表中倒数第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;
    }
}
相关推荐
Algo-hx3 小时前
数据结构入门 (五):约束即是力量 —— 深入理解栈
数据结构·算法
失散133 小时前
分布式专题——22 Kafka集群工作机制详解
java·分布式·云原生·架构·kafka
我要用代码向我喜欢的女孩表白3 小时前
数据结构13003考前急救
数据结构
咖啡Beans4 小时前
SseEmitter + WebClient + Flux实现SSE事件流推送
java·spring boot·flux
NiKo_W4 小时前
C++ 反向迭代器模拟实现
开发语言·数据结构·c++·stl
你三大爷4 小时前
Safepoint的秘密探寻
java·后端
Boop_wu4 小时前
[数据结构] 排序
数据结构·算法·排序算法
YuTaoShao4 小时前
【LeetCode 每日一题】1470. 重新排列数组——(解法一)构造数组
数据结构·算法·leetcode
劲镝丶4 小时前
顺序队列与环形队列的基本概述及应用
数据结构·c++