题解 | #找出单向链表中的一个节点,该节点到尾指针的距离为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; }