题解 | 输出单向链表中倒数第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; } } }