前言
记录一下算法的学习
题目描述
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。
注意: 本题相对原题稍作改动
说明:
给定的 k 保证是有效的。
示例:
输入: 1->2->3->4->5 和 k = 2
输出: 4
解题思路
- 可以使用快慢指针来解决该问题
- 先让快指针移动k次,然后快慢指针一起移动
- 当快指针遍历结束后,慢指针返回的val就是倒数第k个节点
代码
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} k
* @return {number}
*/
var kthToLast = function(head, k) {
// 通过快慢指针
// 创建两个指针,快指针先k步
// 当快指针到达末尾的时候,慢指针所在的node就是最终值
let slow = head
let fast = head
// 1.先让快指针走k步
for (let i = 0; i < k; i++) {
fast = fast.next
}
while(fast) {
slow = slow.next
fast = fast.next
}
// 返回慢指针,为最终返回值
return slow.val
};
复杂度分析
- 时间复杂度:需要遍历n长度所以时间复杂度为O(n)
- 空间复杂度:为常数 O(1)
最后
每天进步一点点