您的位置:首页 > 其它

1517:链表中倒数第k个结点 @jobdu

2013-12-17 04:37 190 查看
题目1517:链表中倒数第k个结点

时间限制:1 秒

内存限制:128 兆

特殊判题:否

提交:460

解决:233

题目描述:

输入一个链表,输出该链表中倒数第k个结点。

(hint: 请务必使用链表。)

输入:

输入可能包含多个测试样例,输入以EOF结束。

对于每个测试案例,输入的第一行为两个整数n和k(0<=n<=1000, 0<=k<=1000):n代表将要输入的链表元素的个数,k代表要查询倒数第几个的元素。

输入的第二行包括n个数t(1<=t<=1000000):代表链表中的元素。

输出:

对应每个测试案例,

若有结果,输出相应的查找结果。否则,输出NULL。

样例输入:
5 2
1 2 3 4 5
1 0
5


样例输出:
4
NULL


经典的题目,关键是corner case

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class S15 {

public static void main(String[] args) throws FileNotFoundException {
BufferedInputStream in = new BufferedInputStream(new FileInputStream("in.in"));
System.setIn(in);
Scanner cin = new Scanner(System.in);

while (cin.hasNextInt()) {
int n = cin.nextInt();
int k = cin.nextInt();
ListNode dummy = new ListNode(-1);
ListNode cur = dummy;
for(int i=0; i<n; i++){
cur.next = new ListNode(cin.nextInt());
cur = cur.next;
}
getLastKth(dummy, k);
}
}

public static void getLastKth(ListNode dummy, int k){
ListNode head = dummy.next;
ListNode probe = head;
int i;
for(i=0; i<k; i++){
if(probe != null){
probe = probe.next;
}else{
break;
}
}
if(i != k){
System.out.println("NULL");
return;
}
ListNode cur = head;
while(probe != null){
probe = probe.next;
cur = cur.next;
}
if(cur != null){
System.out.println(cur.val);
}else{
System.out.println("NULL");
}

}

static class ListNode{
int val;
ListNode next;
public ListNode(int val){
this.val = val;
this.next = null;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: