链表中倒数最后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