题目描述
Enter a linked list and output the kth node from the bottom of the list.
输入一个链表,输出该链表中倒数第k个结点。
Python Solution
分析: 利用快慢指针,快指针先走 k 步,慢指针再走,一直到快指针到头。两者保持距离为 k ,但由于最后一次快指针到头了,慢指针仍然走了一位,所以两者相距 (k - 1)个单位,实现倒数第 k 个结点的目的。
需要注意的是,判定条件为:1.链表是否为空 2. k 的值是否为正 3. k 是否小于链表长度。
代码如下:
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def FindKthToTail(self, head, k):
if not head or k <= 0: # 判断 条件1、2
return None
pre = post = head
for i in range(k):
if not pre: # 判断 条件3
return None
pre = pre.next
while pre:
pre = pre.next
post = post.next
return post
代码的时间复杂度为 O(n) ,因为遍历了一次数组;空间复杂度为 O(1) ,没有利用额外的空间。如果利用 O(n) 的空间来完成本题,则可以取个长度为 n 的数组储存链表的值通过下标访问即可。