问题
输入一个链表,输出该链表中倒数第k个结点。
思路
1)先扫一遍链表,获得总个数n,然后从头走n-k+1次,就得到倒数第k个了。缺点是要扫两遍
2)两个指针从开头出发,第二个指针先往后走k-1步,然后两个指针同时往后走,当第二个到达末尾时,第一个指向的就是倒数第k个
需要注意
head为空、k小于或等于0时,k大于链表长度时的特殊情况
需留心不要写错边界条件
class Solution:
def FindKthToTail(self, head, k):
# head为空,k小于等于0时
if (not head) or k <= 0 :
return None
count = 0
pointer = head
# 第二个指针先走k-1步,而且没有到达none
while(count < k and pointer):
count += 1
pointer = pointer.next
# k大于链表长度时
if count < k:
return None
else:
# 第一个指针
target = head
# 第二个指针继续走
while(pointer):
target = target.next
pointer = pointer.next
return target