連結串列(5)----查詢連結串列倒數第K個節點
阿新 • • 發佈:2019-02-10
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、反轉單鏈表