解法:
- 定义两个指针,fast,slow指向链表的头结点。
 - fast指针先走k步,走的时候要注意判断一下链表的长度是否大于等于k。如果链表的长度也等于k的话,快指针走k步正好会走到空。如果在走第k步之前链表就指向空的话,说明链表长度小于k,直接返回空。
 - 然后fast指针和slow指针一起走。当fast指针指向空的时候,slow指针指向的就是倒数第k个节点。
 
例:k=2
fast先走两步
fast指向空的时候,slow指的就是倒数第二个结点了
c++
class Solution {
public:
    ListNode* FindKthToTail(ListNode* pHead, int k) {
        ListNode* fast = pHead;
        ListNode* slow = pHead;
        for(int i = 0 ; i < k ; i++)
        {
            if(fast == NULL){return NULL;}
            fast = fast->next;
        }
        while(fast!=NULL)
        {
            fast = fast->next;
            slow = slow->next;
        }
        return slow;
    }
};
java
public class Solution {
    public ListNode FindKthToTail (ListNode pHead, int k) {
        ListNode fast = pHead;
        ListNode slow = pHead;
        for(int i = 0 ; i < k ; i++)
        {
            if(fast == null){return null;}
            fast = fast.next;
        }
        while(fast!=null)
        {
            fast = fast.next;
            slow = slow.next;
        }
        return slow;
    }
}
python
class Solution:
    def FindKthToTail(self , pHead , k ):
        fast = pHead;
        slow = pHead;
        for i in range(0,k):
            if fast == None:
                return None
            fast = fast.next;
        while fast!=None:
            fast = fast.next;
            slow = slow.next;
        return slow;

京公网安备 11010502036488号