个人技术分享

目录

题目

图解

代码


面试题 02.02. 返回倒数第 k 个节点 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/kth-node-from-end-of-list-lcci/description/

题目

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

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

示例:

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

说明:

给定的 k 保证是有效的。

图解

最终我们的tail就走到这个节点

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef struct ListNode ListNode;
int kthToLast(struct ListNode* head, int k) {
    // 快慢指针,先让快指针走k步,然后再和慢指针同时走
    ListNode *fast = head, *tail = head;
    //让快指针走k步
    while(k--){
        fast = fast->next;
    }
    //同时走
    while(fast){
    fast = fast->next;
    tail = tail->next;
    }
    return tail->val;
}