题解 | #输出单向链表中倒数第k个结点#
输出单向链表中倒数第k个结点
https://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
int n = in.nextInt();
ListNode head = new ListNode(-1);
ListNode tmp = head;
// 构建链表
for (int i = 0; i < n; i++) {
ListNode node = new ListNode(in.nextInt());
tmp.next = node;
tmp = tmp.next;
}
int k = in.nextInt();
// 快慢指针
ListNode fast = head;
ListNode slow = head;
// fast 先走k步
for (int i = 0; i < k; i++) {
if (fast == null) {
fast = null;
} else {
fast = fast.next;
}
}
ListNode ans = head;
// 快指针走到末尾,慢指针未知即为倒数第k个元素
while (fast != null) {
fast = fast.next;
slow = slow.next;
}
System.out.println(slow.val);
}
}
}
class ListNode {
ListNode next;
int val;
ListNode(int val) {
this.val = val;
next = null;
}
}

