力扣刷题:30-返回倒数第 k 个节点(面试题 02.02)

101 阅读1分钟

本题使用递归的方式,计算出每个节点是倒数的第几个节点,在递归的方法中,当指定的目标节点位置出现时,使用指针变量存储目标节点。

下面是用C++语言实现的代码。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    int kthToLast(ListNode* head, int k) {
        ListNode result(0);
        searchLast(&result, head, k);
        return result.next ? result.next->val : head->val;
    }
    int searchLast(ListNode* result, ListNode* curr, int k) {
        if (curr->next == nullptr) {
            return 1;
        }
        curr = curr->next;
        int num = searchLast(result, curr, k);
        if (k == num) {
            result->next = curr;
        }
        return num + 1;
    }
};