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、删除連結清單重複元素