一、前言
最近在刷力扣上的题目,之前也刷过很多次,一边刷一边忘,很是苦恼。
为什么边学边忘,很大程度是没有应用场景,只是被动的进行填鸭式学习。
为了提高学习效率,觉得还是得坚持写博客,一方面强化记忆,第二强迫自己创造应用场景,学习知识的同时也在产生知识。
二、题目
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
示例:
输入: 1->2->3->4->5 和 k = 2
输出: 4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-node-from-end-of-list-lcci
三、单链表的相关知识
参考我的其他博文: 【python链表】之单向链表详解
四、快慢指针相关知识
快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2次,慢指针每次向前移动1次。通过快慢指针间的差值,来定位节点,实现相对应的操作。
参考我其他博文:【python链表】之快慢指针思想(含实例)
五、解答方法
# 快慢指针
class ListNode:
def __init__(self, x, next=None):
self.val = x
self.next = next
class Solution:
def kthToLast(self, head: ListNode, k: int) -> int:
slow = head # 慢指针
fast = head # 快指针
while k > 0:
fast = fast.next
k -= 1
while fast is not None:
fast = fast.next
slow = slow.next
return slow.val
if __name__ == '__main__':
a = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5,)))))
obj = Solution()
Node = obj.kthToLast(a, 2)
print(Node)
结果:
4