// ... [其它代码不变] // 通用查找函数,找到所有匹配的数据 struct list *list_find_all_generic(struct list *head, void *key, int (*callback)(void *, void *)) { struct list *resultHead = list_init(NULL); struct list *p = head->next; while (p != NULL) { void *data = p->Data; if (callback(data, key) == 1) { list_add(resultHead, data); } p = p->next; } return resultHead; } int main() { // ... [其它代码不变] // 查找员工 int search_id = 1003; struct list *searchResults = list_find_all_generic(head, &search_id, staff_id_find); // 打印所有找到的结果 list_display_generic(searchResults, staff_printf); //销毁查找结果链表 free(searchResults); // 这里只释放头节点,因为数据是共享的,不应该再释放 //销毁主链表 list_destroy(head, free_staff); return 0; }