如何找出單鏈表中的倒數第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;
}
相關文章
相關標籤/搜索