题目:输入一个链表,输出该链表中倒数第K个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个结点。
package com.edu;
class LinkNode{ //定义一个结点类型
int val;
LinkNode link=null;
public LinkNode(int val) {
this.val=val;
}
}
public class FindKthToTail {
public LinkNode Test(LinkNode lst ,int k){ //判断该链表中是否有结点,和输入的k是否大于1
if(lst==null && k<=0){
return null;
}
LinkNode head=lst;
LinkNode kTh =lst;
for(int i=0;i<k-1;i++){
if(head.link!=null)
head=head.link;
else
return null; //当链表中结点的个数少于K个时,所做的处理
}
while(head.link !=null){
head=head.link;
kTh = kTh.link;
}
return kTh;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkNode first=null;
LinkNode second =null;
for(int i=1;i<20;i++){ //该for循环是用来创建一个结点个数为19的单链表
LinkNode node = new LinkNode(i);
if(first ==null){
first=node;
second=first;
}
else{
second.link=node;
second=node;
}
}
/*
LinkNode third=first;
while(third!=null){
System.out.println(third.val);
third=third.link;
}
*/
LinkNode s = new FindKthToTail().Test(first, 10);
System.out.println(s.val);
}
}