package java_jianzhioffer_algorithm;
/**
* 题目:输入一个链表,输出该链表中倒数第k个结点。
* @author hexiaoli
* 思路:快满指针,快指针比慢指针多走k步
*/
class ListNodefkr{
int val;
ListNodefkr next = null;
ListNodefkr(int val) {
this.val = val;
}
}
public class FindKthToTail {
public static ListNodefkr findKthToTail(ListNodefkr head,int k) {
if(head == null||k == 0){
return null;
}
ListNodefkr temp = head;
// 第一个指针先走k步
for(int i =0;i<k;i++){
if(temp == null){
return null;
}
temp = temp.next;
}
// 两个指针同时向后遍历,直至第一个指针到达null,第二个指针指向倒数第k个结点
while(temp != null){
head = head.next;
temp = temp.next;
}
System.out.println(head.val);
return head;
}
public static void main(String[] args) {
ListNodefkr head = new ListNodefkr(5);
ListNodefkr temp1 = new ListNodefkr(4);
ListNodefkr temp2 = new ListNodefkr(1);
ListNodefkr tail = new ListNodefkr(3);
head.next = temp1;
temp1.next = temp2;
temp2.next= tail ;
findKthToTail(head,2);
}
}