0
点赞
收藏
分享

微信扫一扫

22题 链表中倒数第k个节点


这道题对我来说难点就是临界点不好找,总是找不准慢指针啥时候开始移动,还有就是如果链表的长度不够k咋办的情况,最终的代码如下:

class ListNode:
def __init__(self, data):
self.val = data
self.next = None

class Solution:
def FindKthTail(self, head, k):
// 验证参数的合理性
if head is None or k < 1:
return None
// 初始化数据
first, second = head, head
setp = 0

// 真正的逻辑
while first.next is not None:
first = first.next
step += 1
if step >= k:
second = second.next

// 最终的验证
if step >= k - 1:
return second
else:
return None

这道题使用前后两个指针,他们之间的距离是k - 1,这样当前面的指针指向最后一个节点时,后面的指针指向的就是倒数第k个,如图:

22题 链表中倒数第k个节点_两个指针

最开始时两个指针都指向头节点:

22题 链表中倒数第k个节点_倒数第k个_02

紧接着第一个指针开始移动,当第一个指针移动的步数等于k时,第二个指针开始移动,以后在满足条件的情况下两个指针都移动一下,整个过程如下图:

22题 链表中倒数第k个节点_初始化_03

最后返回第二个指针指向的节点即可,但是还需要判断一下,此时走过的步数是否大于等于k,如果链表的长度太短的时候会出错,如下图:

22题 链表中倒数第k个节点_链表_04

最终第二个指针指向的还是头结点,但是这并不是倒数第k个节点,这就需要返回None

举报

相关推荐

0 条评论