返回倒数第k个节点
题目描述
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
示例:
输入: 1->2->3->4->5 和 k = 2
输出: 4
来源:力扣(LeetCode)
原题连接
分析
这个题目相对简单:
- 遍历两次链表,第一次遍历求得链表的长度L,第二遍遍历到第(L-k)个节点,并返回该节点即可。
- 遍历一次链表,将所有的链表的值存储在一个数组中,返回数组的[-k]元素(python语言的写法)
题解
这个题目还可以考虑使用快慢指针,实现一次遍历链表,并且不需要额外的数组辅助
(1)产生两个指针,fast指针和slow
(2)将fast指针先向后移动k个节点
(3)同时移动fast和slow指针,slow指针和fast指针之间的距离就是k个节点,所以当fast指针指向链表结尾的时候,slow指针指向的节点就是倒数k个节点
代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def kthToLast(self, head: ListNode, k: int) -> int:
slow = head
fast = head
while k > 0:
k -= 1
fast = fast.next
while fast != None:
fast = fast.next
slow = slow.next
return slow.val