【Java语言】剑指offer系列之链表、双指针法---链表中倒数第k个结点

题目描述
输入一个链表,输出该链表中倒数第k个结点。

具体代码实现如下:

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
     
    public ListNode FindKthToTail(ListNode head,int k) {
     
    // 双指针法,定义一个快指针和一个慢指针均指向头节点,然后让快指针先走k步,最后让两个指针同步进行,
    // 当快指针为空时跳出,此时的慢指针的指向就是倒数第k个结点。
        ListNode fast = head;
        ListNode low = head;
        for(int i = 0; i < k; i++){
     // 让快指针先走k步
            if(fast == null) return null;// 在没走到k步之前若返回,则证明k>链表长度
            fast = fast.next;
        }
        while(fast != null){
     // 当fast不为空的时候,两个指针同时向前移动一步,知道fast为空
            fast = fast.next;
            low = low.next;
        }
        return low;
    }
}

人生若只如初见,何事秋风悲画扇。
等闲变却故人心,却道故人心易变。
-----------纳兰性德

小白寄语:学如逆水行舟,不进则退。

你可能感兴趣的:(数据结构与算法基础,剑指offer,牛客网,指针,链表,java,数据结构,单链表)