生活会辜负努力的人,但不会辜负一直努力的人

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

方法一:快慢指针法

  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;
}

 

posted on 2019-01-14 15:04  何许亻也  阅读(631)  评论(0编辑  收藏  举报