class Solution:
def FindKthToTail(self , pHead: ListNode, k: int) -> ListNode:
# write code here
# 第一种 数组法,直接返回
res = []
while pHead:
res.append(pHead)
pHead = pHead.next
if k > len(res) or not k: return None # 判断非法的 k 值
return res[-k]
# 第二种 快慢指针 双指针
fast = pHead
slow = pHead # 定义快慢指针
for i in range(0, k):
if not fast:
return None
fast = fast.next # 快指针的提前k步
# 双指针同时行走,每次都为1格,中间始终相差为k步
while fast: # fast有值到了末尾就结束,返回slow的位置就是倒数k位的位置。然后返回
# slow就是剩余的k位
fast = fast.next
slow = slow.next
return slow
# 第三种 栈的方法