/*
 输入一个链表,输出该链表中倒数第k个结点。
 为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。
 例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。
 这个链表的倒数第3个结点是值为4的结点。
 */
public class Class18 {
	//利用两个相聚为k-1的指针
	static class ListNode{
		int val;
		ListNode next = null;
		ListNode(int val){
			this.val = val;
		}
	}
	
	public ListNode FindThisPoint(ListNode head, int k){
		ListNode fast = head;
		ListNode slow = head;
		if(head == null || k <= 0){
			return null;
		}
		//fast先走k-1步
		while(k-- > 1){
			if(fast.next != null){
				fast = fast.next;
			}else{
				return null;
			}
		}
		//接着slow跟着fast走
		while(fast.next != null){
			fast = fast.next;
			slow = slow.next;
		}
		return slow;
	}
	
	public void test() {
        ListNode node1=new ListNode(1);
        ListNode node2=new ListNode(2);
        ListNode node3=new ListNode(3);
        ListNode node4=new ListNode(4);
        node1.next=node2;
        node2.next=node3;
        node3.next=node4;
        ListNode result = FindThisPoint(node1, 1);
        if(result.val==4)
            System.out.println("test4 passed!");
        else
            System.out.println("test4 failed!");   
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Class18 c = new Class18();
		c.test();
}
}
原文:https://www.cnblogs.com/zhuozige/p/12451939.html