输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。
链表结点定义如下:
```c++
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≤*v**a**l*≤10000
本题有多组样例输入。
> 题目来源
[题目来源](https://www.nowcoder.com/practice/e45e078701ab4e4cb49393ae30f1bb04?tpId=37&tqId=21235&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=)
输入说明
1 输入链表结点个数
2 输入链表的值
3 输入k的值
输出一个整数
```c
输入: 8
1 2 3 4 5 6 7 8
4
输出:
5
```
`import java.util.Scanner
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in)
while (sc.hasNext()) {
int n = sc.nextInt()
Node head = new Node(-1)
Node temp = head
//生成链表
for (int i = 0
Node node = new Node(sc.nextInt())
temp.next = node
temp = temp.next
}
int k = sc.nextInt()
if(get(head.next,k) != null){
System.out.println(get(head.next,k).val)
}
else{
System.out.println(0)
}
}
}
public static Node get(Node head, int k) {
int n = 0
Node node = null
//记录有多少节点
for (node = head
n++
}
//找倒数第k个
for (node = head
node = node.next
}
return node
}
}
class Node {
Node next
int val
Node(int val) {
this.val = val
next = null
}
}`
- O(n)