## 链表查找 ```c /** * @brief searchList 查找指定节点 * @param head 链表头指针 * @param key 需要查找的值 * @return */ Node *searchList(Node *head, int key){ head = head->next; while(head){ if(head->data == key){ break; }else{ head = head->next; } } return head; } ``` ## 链表删除 ```c void deleteNodeList(Node *head, Node *find){ while(head->next != find){ head = head->next; } head->next = find->next; free(find); } ``` ## 作业 - 给链表排序 ```c /** * @brief bubbleSort 对链表进行排序 * @param head 链表头指针 */ void bubbleSort(Node *head){ // 1.计算链表长度 int len = listLength(head); // 2.定义变量记录前后节点 Node *cur = NULL; // 3.相邻元素进行比较, 进行冒泡排序 for(int i = 0; i < len - 1; i++){ cur = head->next; for(int j = 0; j < len - 1 - i; j++){ printf("%i, %i\n", cur->data, cur->next->data); if((cur->data) > (cur->next->data)){ int temp = cur->data; cur->data = cur->next->data; cur->next->data = temp; } cur = cur->next; } } } ``` ```c /** * @brief sortList 对链表进行排序 * @param head 链表头指针 */ void sortList(Node *head){ // 0.计算链表长度 int len = listLength(head); // 1.定义变量保存前后两个节点 Node *sh, *pre, *cur; for(int i = 0; i < len - 1; i ++){ sh = head; // 头节点 pre = sh->next; // 第一个节点 cur = pre->next; // 第二个节点 for(int j = 0; j < len - 1 - i; j++){ if(pre->data > cur->data){ // 交换节点位置 sh->next = cur; pre->next = cur->next; cur->next = pre; // 恢复节点名称 Node *temp = pre; pre = cur; cur = temp; } // 让所有节点往后移动 sh = sh->next; pre = pre->next; cur = cur->next; } } } ``` - 链表反转 ```c /** * @brief reverseList 反转链表 * @param head 链表头指针 */ void reverseList(Node *head){ // 1.将链表一分为二 Node *pre, *cur; pre = head->next; head->next = NULL; // 2.重新插入节点 while(pre){ cur = pre->next; pre->next = head->next; head->next = pre; pre = cur; } } ``` ## 最后,如果有任何疑问,请加微信 **leader_fengy** 拉你进学习交流群。 开源不易,码字不易,如果觉得有价值,欢迎分享支持。