方法一:快慢指针法
- 在查找过程中,设置两个指针,初始时指向首元结点(第一个元素结点)。
- 然后,让其中一个指针先前移k步。
- 然后两个指针再同时往前移动。当先行的指针值为NULL时,另一个指针所指的位置就是所要找的位置。
struct Node { int data; Node *next; }; /* 函数功能:找出链表倒数第k个结点 输入参数:head:链表头指针(指向头结点) 返回值:指向倒数第k个结点的指针 */ Node* findLastK(Node* head,int k) { if (head == NULL || head->next == NULL) return head; Node *slow, *fast; fast = slow = head->next; int i; for (i = 0; i < k&&fast; ++i) { fast = fast->next; } //判断k是否已超出链表长度 if (i < k) return NULL; while (fast != NULL) { fast = fast->next; slow = slow->next; } return slow; }