# 双指针
class Solution:
def kthToLast(self, head: ListNode, k: int) -> int:
pre, cur = head, head
for i in range(k):
cur = cur.next
while cur:
pre, cur = pre.next, cur.next
return pre.val
方法二:快慢指针
思路:思路和上面完全一致,用 fast 和 slow 来定于快慢指针。
# 快慢指针
class Solution:
def kthToLast(self, head: ListNode, k: int) -> int:
fast, slow = head, head
while k > 0:
fast = fast.next
k -= 1
while fast != None:
fast = fast.next
slow = slow.next
return slow.val
方法三:哨点指针
思路:亦可以称为单指针,首先遍历算出链表的长度 n ,然后在 n - k 的长度中循环即可。
# 哨点指针
class Solution:
def kthToLast(self, head: ListNode, k: int) -> int:
cur = head
n = 0
while cur != None:
n += 1
cur = cur.next
cur = head
for i in range(n - k):
cur = cur.next
return cur.val