题解 | 输出单向链表中倒数第k个结点
解题思路:
- 先将指定输入转化为链表
- 使用快慢指针,先将快指针前进k步,然后同步前进快慢指针,最终快指针为null时,慢指针的值就是倒数k个节点
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
List<Integer> result = new ArrayList<>();
while (in.hasNext()) {
int n = Integer.parseInt(in.nextLine());
ListNode head = buildLinkList(in.nextLine().split(" "));
int k = Integer.parseInt(in.nextLine());
ListNode fast = head;
ListNode slow = head;
while (k > 0 && fast != null) {
fast = fast.next;
k--;
}
while (fast != null) {
fast = fast.next;
slow = slow.next;
}
result.add(slow.val);
}
for (int a : result) {
System.out.println(a);
}
}
public static ListNode buildLinkList(String[] valLine) {
String first = valLine[0];
ListNode head = new ListNode(Integer.parseInt(first));
ListNode pre = head;
for (int i = 1; i < valLine.length; i++) {
pre.next = new ListNode(Integer.parseInt(valLine[i]));
pre = pre.next;
}
return head;
}
static class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
}
}

查看11道真题和解析