链表中倒数最后k个结点

描述 输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。 如果该链表长度小于k,请返回一个长度为 0 的链表。

数据范围:0≤n≤10^5,0≤a≤10^9,0≤k≤10^9

要求:空间复杂度 O(n),时间复杂度 O(n) 进阶:空间复杂度 O(1),时间复杂度 O(n)

思路:双指针,链表长度为n,需要返回倒数k个节点,首先得找到这个节点的位置,节点位置在n-k处,指针fast先走k步,然后result再走,当fast走到链表结尾的时候,result刚好走到n-k处,所以一次循环搞定。fast每走一步k自减一,fast走到k处时,k==0,此时result开始走,result=pHead,当fast==None的时候,循环结束,result走到n-k处。最后返回result即可。

# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param pHead ListNode类 
# @param k int整型 
# @return ListNode类
#
class Solution:
    def FindKthToTail(self , pHead: ListNode, k: int) -> ListNode:
        # write code here
        fast = pHead
        result = None
        if k <= 0:
            return result
        while fast != None:
            fast = fast.next
            k -= 1
            if k == 0:
                result = pHead
            elif k < 0:
                result = result.next
        return result