题目描述
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。 这个链表的倒数第 3 个节点是值为 4 的节点。
示例:
给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.
解题思路: 快慢指针法
- 定义快慢2个指针, 慢指针指向head, 快指针指向head后的第k个元素 (也就是快慢指针相差k)
- 快慢指针同时往后移动, 直到快指针到链表结尾
- 因为快慢指针相差k, 快指针在结尾, 那么慢指针就在结尾的倒数k位置, 返回慢指针 时间复杂度: O(n)
示例代码
def getKthFromEnd(head: helper.ListNode, k: int) -> helper.ListNode:
h1, h2 = head, head
while k > 0: # 步骤1
h2 = h2.next
k -= 1
while h2: # 步骤2
h1 = h1.next
h2 = h2.next
return h1