题解 | #找出单向链表中的一个节点,该节点到尾指针的距离为K#
#include <bits/stdc++.h>
using namespace std;
struct ListNode {
    int m_nKey;
    ListNode* m_pNext;
    ListNode(int x): m_nKey(x), m_pNext(NULL){}  // listnode[i] 直接赋
};
ListNode* creatList(const vector<int>& arr) {
    if (arr.empty())
        return nullptr;
    ListNode* head, *cur, *pre;  // 三个指针 完成初始化
    head = new ListNode(1);  // new了一个head 链表对象 int = 1 完成初始化

    pre = head;
    for (int i = 2; i < arr.size(); i++) {
        cur = new ListNode(i);

        pre->m_pNext = cur;   // 其实pre起一个中间媒介的作用,他在初始的时候代表的是head,在for里面 他每次帮助传递地址后,又成为cur 如此以往。
        pre = cur;             //链表之间的作用是不紧密的 只要有地址即可
    }
    return head;
}
int solve(ListNode* head, int k) {
    ListNode* slow, *fast;
    slow = fast = head;
    for (int i = 1; i <= k; i++)
        fast = fast->m_pNext;
    while (fast) {
        fast = fast->m_pNext;  // fast 先走k个,这样当fast指空时,slow正好到了倒数第k个的前面一个
        slow = slow->m_pNext;
    }
    return slow->m_nKey;
}
int main() {
    vector<int> arr(8, 0);
    int k;
    for (int i = 1; i <= 7; i++)  //其实不用如此
        arr[i] = i;
    cin >> k;
    ListNode* head = creatList(arr);
    cout << solve(head, k);
    return 0;
}