倒数第K个节点。思路清晰

链表指针的解法中使用前后指针技巧
思路:

  1. 首先让前指针先走K步
  2. 此时后指针还在head处,那么两者之间的差距就是题目中k步
  3. 这时候让后指针和前指针共同走。当前指针走到链表结尾处,后指针正好就是倒数第k个节点

注意点:

  • 链表可能只有长度5,但是题目可能需要倒数第10个节点,显然不可能,会出现空指针。所以需要对空指针进行判空。
public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        if(head == null) return null;
        ListNode pre = head;//前指针
        ListNode cur = head;//后指针
        while(pre != null && (k--)!=0){
        //防止越界出现空指针
            pre = pre.next;
        }
        //当走到这里的时候,pre可能是因为出现空指针提前结束了,所以进行判断。只有k还没减到0的时候pre又==null,才表示提前结束
        if(pre == null && k != 0) return null;
        while(pre != null) {
            pre = pre.next;
            cur = cur.next;
        }
        return cur;