# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def FindKthToTail(self, head, k):
# write code here
'''
fast=head
slow=head
a=k
count=0
while fast!=None:
fast=fast.next
count+=1
if k<1:
slow=slow.next
k=k-1
if count<a:
return
return slow
'''
fast=head
slow=head
a=k
while fast!=None:
fast=fast.next
if k<1:
slow=slow.next
k=k-1
if k>0:
return
else:
return slow
比较经典的解法,用快慢两个指针,快指针先移动k步,然后快慢指针一起移动直到快指针为空的时候,证明如下:
设总长度为a,快指针遍历了所有的点,移动了a步。慢指针比快指针少移动k步,移动了a-k步,当快指针走完后慢指针还差k步
注意:会出现6 [1,2,3,4,5]这种情况,即k超出了链表长度,此时要返回空