剑指offer-链表中倒数第k个结点

题目描述:

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

思路:

​ 假设以1为起始下标,链表长度为N,那么倒数第K个结点所在的位置是N-(K-1)

​ 但由于不知道N的大小,因此设置前后指针,先让前指针走K-1步,这样前后指针的距离是K-1,再让前后指针一起移动,当前指针移动到链表尾时,后指针所在的位置就是倒数第K个结点.

code

public ListNode FindKthToTail(ListNode head,int k) {
    if(head==null || k==0) {
        return null;
    }
    ListNode pre=head;
    ListNode ans=head;
    k--;
    while(pre.next!=null&& k>0 ) {
        pre=pre.next;
        k--;
    }
    if(k!=0) {
        return null;
    }
    while(pre.next!=null) {
        pre=pre.next;
        ans=ans.next;
    }
    return ans;
}