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

题目链接:点击打开链接

题目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 2
1 2 3 4 5
1 0
5
样例输出:
4
NULL
代码如下:

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值