class Solution:
# 方法一:两次从左到右遍历链表,第一次获取长度,第二吃获取目标值, 时间复杂度为O(n),代码繁琐
def FindKthToTail(self , pHead , k ):
if not pHead:
return pHead
if k <= 0:
print("Value of k must be positive")
return None
# 计算链表长度
length = 0
p = q = pHead
while p:
length += 1
p = p.next
if k > length:
print("Value of k is greater than length of list")
return None
else:
while q and length != k:
length = length - 1
q = q.next
return q
# 方法二:双指针法,前一个指针先走k步,后一个指针再走(链表长度-k)步
def FindKthToTail(self , pHead , k ):
# # 链表为空
if not pHead or k<0:
return pHead
# 链表只有一个结点
if pHead and not pHead.next:
if k > 1:
print("Value of k is greater than length of list")
return pHead.next
else:
return pHead
# 链表包含两个或两个以上结点
prev = post = pHead
for i in range(k):
# 每走一步判断是否走过的步数大于链表长度,若大于,则返回空
if not prev:
return prev
prev = prev.next
# 走过的步数k < 链表长度
while prev:
prev = prev.next
post = post.next
# 走过的步数k = 链表长度
return post
发表于 2021-03-07 00:30:52
回复(0)