描述 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。

链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 正常返回倒数第k个结点指针,异常返回空指针. 要求: (1)正序构建链表; (2)构建后要忘记链表长度。 数据范围:链表长度满足 1 \le n \le 1000 \1≤n≤1000 , k \le n \k≤n ,链表中数据满足 0 \le val \le 10000 \0≤val≤10000

本题有多组样例输入。

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int a = in.nextInt();
            ListNode dummyNode = new ListNode(0);
            ListNode temp = dummyNode;
            for (int i = 0; i < a; i++) {
                temp.m_pNext = new ListNode(in.nextInt());
                temp = temp.m_pNext;
            }
            int index = in.nextInt();
            System.out.println(findIndex(dummyNode, index));
        }
    }
    public static int findIndex(ListNode node, int index) {
        int length = 0;
        List<Integer> list = new ArrayList<>();
        while (node != null) {
            list.add(node.m_nKey);
            node = node.m_pNext;
        }
        return list.get(list.size() - index);
    }
}
    class ListNode {
        int m_nKey;
        ListNode m_pNext;
        public ListNode(int value) {
            this.m_nKey = value;
        }
    }