leecode-面试题 02.02. 返回倒数第 k 个节点

66 阅读1分钟

前言

记录一下算法的学习

题目描述

实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。

注意: 本题相对原题稍作改动

说明:

给定的 k 保证是有效的。

示例:

输入: 1->2->3->4->5 和 k = 2
输出: 4

解题思路

  1. 可以使用快慢指针来解决该问题
  2. 先让快指针移动k次,然后快慢指针一起移动
  3. 当快指针遍历结束后,慢指针返回的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)

最后

每天进步一点点