刷题快刷魔怔了,上来就是哈希表
代码如下:

def FindKthToTail(self , pHead: ListNode, k: int) -> ListNode:
    hashtable = dict()
    i = 1
    p = pHead
    while p:                        # 将每个结点存入哈希表
        hashtable[i] = p
        p = p.next
        i += 1

    if i - k in hashtable:          # 然后寻找倒数第 k 个
        return hashtable[i - k]
    else:
        return None

然后我仔细思考了一下
发现遍历一遍链表好像也没什么
代码如下:

def FindKthToTail(self , pHead: ListNode, k: int) -> ListNode:
    p = pHead
    i = 0
    while p:            # 先遍历链表,确定结点个数
        p = p.next
        i += 1

    if i - k < 0:       # 判断倒数第 k 个结点是否存在
        return None

    p = pHead           # 遍历至倒数第 k 个结点
    for _ in range(i - k):
        p = p.next

    return p

怎么说呢,O(n + n - k) 也是 O(n)(滑稽)
写到这还没完
我相信自己肯定没题解快

遂观评论区
习得快慢指针
代码如下:

def FindKthToTail(self , pHead: ListNode, k: int) -> ListNode:
    slow, fast = pHead, pHead

    for _ in range(k):          # 先令快指针走 k 步
        if fast:
            fast = fast.next
        else:                   # 若 fast 空则返回空
            return None

    while fast:                 # fast 领跑 k 步
        slow = slow.next        # 当 fast 为 None 时
        fast = fast.next        # slow 恰好为倒数第 k 个结点

    return slow

妙啊
接下来该魔怔快慢指针了