九度oj 1517 链表中倒数第k个结点

来源:互联网 发布:竞彩足球数据下载 编辑:程序博客网 时间:2024/05/21 17:16

题目链接:点击打开链接

题目1517:链表中倒数第k个结点

时间限制:1 秒

内存限制:128 兆

特殊判题:

提交:2335

解决:1030

题目描述:

输入一个链表,输出该链表中倒数第k个结点。
(hint: 请务必使用链表。)

输入:

输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为两个整数n和k(0<=n<=1000, 0<=k<=1000):n代表将要输入的链表元素的个数,k代表要查询倒数第几个的元素。
输入的第二行包括n个数t(1<=t<=1000000):代表链表中的元素。

输出:

对应每个测试案例,
若有结果,输出相应的查找结果。否则,输出NULL。

样例输入:
5 21 2 3 4 51 05
样例输出:
4NULL
代码如下:

import java.util.*;import java.io.*;public class Main {public static void main(String []args){Scanner cin = new Scanner(new InputStreamReader(System.in));PrintWriter cout = new PrintWriter(System.out) ;while(cin.hasNext()){new Solve(cin.nextInt() , cin.nextInt() ).solve(cin , cout) ;}cout.flush() ;cout.close();}}class Node{int val ;Node next ;Node(int val){this.val = val ;next = null ;}}class Solve{Node head = null ;int n , k ;Solve(int n , int k){this.n = n ;this.k = k ;}void solve(Scanner cin , PrintWriter cout){if(n < k || n == 0 || k== 0){while(n-- > 0) cin.next() ;cout.println("NULL");return ;}head = new Node(cin.nextInt()) ;  //建立链表Node now = head ;for(int i = 1 ; i< n ; i++){now.next = new Node(cin.nextInt()) ;now = now.next ;}Node first = head ;   //让第一个指针先向前走k步,当第一个指针到链尾时,第二个指针指向倒数第k个元素for(int i =1 ; i<= k  ; i++)first = first.next ;Node second = head ;while(first != null){first = first.next ;second = second.next ;}cout.println(second.val);}}


0 0
原创粉丝点击