如何找出单链表中的倒数第k个元素

方法一:快慢指针法函数

  1. 在查找过程当中,设置两个指针,初始时指向首元结点(第一个元素结点)。
  2. 而后,让其中一个指针先前移k步。
  3. 而后两个指针再同时往前移动。当先行的指针值为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;
}
相关文章
相关标签/搜索