JZ22链表中倒数最后k个节点
解法一
双指针法,定义两个快慢指针,先让快指针走k步,然后让两个指针以相同速度向前,直到快指针走到尾部none的位置,此时慢指针正好在倒数第k的位置此方法的时间复杂度为O(n)空间复杂度为O(1)
class Solution:
def FindkthToTail(self, pHead: ListNode, k:int) ->ListNode:
fast = pHead
slow = pHead
for i in range(k):
if not fast:
"""判断k是否大于链表长度"""
return None
fast = fast.next
while fast:
slow = slow.next
fast = fast.next
return slow
解法二
利用数组来存放链表元素,然后直接用数组输出倒数第k个数,此方法的空间复杂度和时间复杂度都为O(n)因为创建了一个数组去存放链表的元素
class Solution:
def FindkthToTail(self, pHead: ListNode, k:int) ->ListNode:
list = []
while pHead:
list.append(pHead)
pHead = pHead.next
if k > len(list) or k == 0:
return None
else:
return list[-k]