1】按值修改
// 在链表的指定位置修改节点 void ModPos(Node* head, int pos, DataType newData) { if (IsEmpty(head) || pos < 0) { printf("无效的操作\n"); return; } Node* temp = head->next; // 临时指针,用于遍历链表 // 遍历链表到指定位置的节点 for (int i = 1; i < pos ; ++i) { temp = temp->next; //指定位置节点 } // 修改节点的数据 temp->Data = newData; }
2】按值查找,返回当前节点的地址(先不考虑重复,如果有重复,返回第一个)
// 按值查找链表中的节点 int FindNode(Node* head, DataType value) { Node* current = head->next; // 从第一个实际节点开始遍历 int i = 1; while (current != NULL) { if (current->Data == value) { printf("找到值的节点位置:\n"); return i; // 找到匹配的节点,返回其地址 } current = current->next; // 移动到下一个节点 i++; } printf("未找到值的节点位置。\n"); return -1; // 未找到匹配的节点,返回-1 }
3】反转
// 反转链表 Node* RevList(Node* head) { Node* prev = NULL; // 前一个节点初始化为NULL Node* current = head->next; // 当前节点从第一个实际节点开始 Node* next = NULL; // 下一个节点 while (current != NULL) { next = current->next; // 保存当前节点的下一个节点 current->next = prev; // 反转当前节点的指针方向 prev = current; // 移动prev到当前位置 current = next; // 移动current到下一个位置 } // 更新头节点的next指针 head->next = prev; return head; // 返回反转后的链表头节点 }
4】销毁链表// 释放链表空间函数 // 功能:释放链表中所有节点的内存 void FreeList(Node* head) { Node* current = head; // 当前节点指针 Node* next; // 下一个节点指针 while (current != NULL) { // 遍历链表 next = current->next; // 保存下一个节点的指针 free(current); // 释放当前节点的内存 current = next; // 移动到下一个节点 } }
作业:7.8
最新推荐文章于 2024-07-08 21:54:30 发布