package jianzhiOffer;

/**
 * 输入一个链表,输出该链表中倒数第k个结点。
 * @author user
 * 思路:此题考查的是代码的鲁棒性,因此不能使用递归的方法,因为
 * 当链表长度很长时,递归会导致栈溢出。
 * 此题我们可以设置两个指针,都指向第一个结点,然后让其中一个指针
 * 正向移动k个结点,然后让两个指针同时移动,当第一个指针移动到尾
 * 结点的时候,第二个指针指向的结点就是倒数第k个结点
 */
public class ch14 {

    public ListNode FindKthToTail(ListNode head,int k) {
		ListNode first = head;
		ListNode second = head;
		int i = k - 1;
		if(head == null || i < 0) {
			return null;
		}
		while(i > 0) {
			first = first.next;
			i--;
		}
		if(first == null) {
			return null;
		}
		while(true) {
			if(first.next == null) {
				break;
			}
			first = first.next;
			second = second.next;
		}
		return second;
    }
}