天天看點

連結清單(6)----查找連結清單中間節點

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、查找連結清單中間節點,設定快慢指針,快指針一次走兩步,慢指針一次走一步

void *SearchMidNode( List_t *list){
    if ( list == NULL || list->head == NULL )
        return NULL;

    ListElement_t *pFast = list->head;
    ListElement_t *pSlow = list->head;

//若節點為N個, N為奇數,則傳回第N/2 +1個節點, N為偶數,則傳回第N/2個節點
    while( pFast->next  != NULL && pFast->next->next != NULL){
        pFast = pFast->next->next;
        pSlow = pSlow->next;
    }

    return pSlow->data;
}
           

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

連結清單面試題合集

1、單連結清單基本操作

2、雙連結清單基本操作

3、循環單連結清單基本操作

4、反轉單連結清單

5、查找單連結清單倒數第K個節點

6、倒序列印連結清單

7、查找連結清單中間節點

8、删除連結清單第K個節點,平均時間複雜度為O(1)

9、判斷連結清單是否有環

10、判斷兩個單連結清單是否相交

11、求相交連結清單的第一個相交節點

12、判斷是否有環,并判定是6型環還是0型環

13、判斷連結清單是否有環,并求環入口節點

14、合并兩個有序單連結清單

15、給定連結清單中間某節點,不周遊連結清單,将帶插入節點插入給定節點之前

16、删除連結清單重複元素