1. 程式人生 > >連結串列(5)----查詢連結串列倒數第K個節點

連結串列(5)----查詢連結串列倒數第K個節點

1、連結串列定義

typedef struct ListElement_t_ {
    void *data;
    struct ListElement_t_ *next;
} ListElement_t;

typedef struct List_t_{
    int size;
    int capacity;
    ListElement_t *head;
    ListElement_t *tail;
} List_t;



2、查詢連結串列第K個節點資料

設定快慢指標,快指標超前慢指標k-1個節點,然後快慢指標再同時遍歷連結串列,當快指標遍歷到連結串列結尾時,慢指標是倒數第k個節點。

void  *searchRKthNode( List_t *list, unsigned int k ){
    if( list == NULL || list->head == NULL || k == 0)//k是無符號數,因此需要判斷是否為0
        return NULL;

    ListElement_t *pFast = list->head;
    while( k > 1 && pFast != NULL ){
        --k;
        pFast = pFast->next;
    }
    //k>1說明節點數少於k個, pFast=NULL說明恰好連結串列為k-1個節點
    if( k > 1 || pFast == NULL )
        return NULL;

    ListElement_t *pSlow = list->head;
    while( pFast->next != NULL ){
        pFast = pFast->next;
        pSlow = pSlow->next;
    }

    return pSlow->data;
}


其他相關題目下面以超連結形式給出:

4、反轉單鏈表