我们维护两个指针, 它们之间的距离为n。
然后。我将这两个指针同步地在这个单链表上移动,保持它们的距离 为n不变。
那么,
当第二个指针指到空时。第一个指针即为所求。
#include <iostream> struct Node { int data; Node* next; }; void initList(Node* vNode) { for (int i=0; i < 20; ++i) { Node* TempNode = new Node; TempNode->data = i; TempNode->next = vNode->next; vNode->next = TempNode; } } Node* getNthBackWards(const Node* vNode, int vN) { if (vN < 1 || vNode == NULL) return NULL; Node* p = vNode; Node* q = vNode; while (vN>0) { ++q; if (q == NULL) return NULL; --vN; } while (q != NULL) { ++q; ++p; } return p; } int main() { Node* Root = new Node; Root->next = NULL; initList(Root); Node* Result = getNthBackWards(Root, 7); std::cout << Result->data << std::end; return 0; }
时间: 2024-12-17 00:27:38