diff --git a/code_lastK_2009.cpp b/code_lastK_2009.cpp new file mode 100644 index 0000000..970853e --- /dev/null +++ b/code_lastK_2009.cpp @@ -0,0 +1,34 @@ +#include +#include + +typedef struct node { + int data; + struct node* link; +}NODE; + +void create(NODE* p, int a[], int pos, int length) { + if (pos < length) { + p->data = a[pos]; + p->link = (NODE*)malloc(sizeof(NODE)); + p->link->data = NULL;//用0作为结束标志 + create(p->link, a, pos + 1, length); + } +} + +int getLastK(NODE* p, int k) { + NODE* p_fast = p, * p_slow = p; + while (--k && p_fast->link != NULL)p_fast = p_fast->link; + p_fast = p_fast->link; + while (p_fast->data) { + p_slow = p_slow->link; + p_fast = p_fast->link; + } + return p_slow->data; +} + +int main() { + NODE p; + create(&p, (int[]) { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, 0, 10); + int ret = getLastK(&p, 7); + return 0; +} \ No newline at end of file