描述 输入一个单向链表,输出该链表中倒数第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;
}
}