酷代码 AI
菜单
服务商
DeepSeek字节豆包讯飞星火
更多选项

C++ 实现:将链表中最大值节点移至末尾的算法及代码详解

以下是解题思路和 C++ 代码实现: 解题思路: 1. 首先遍历链表,找到数据域值最大的链结点以及其前一个链结点。 2. 如果最大节点不是链表的尾节点,将其从当前位置删除,并插入到链表的末尾。 ```cpp #include <iostream> using namespace std; struct Node { int data; Node* link; Node(int x) : data(x), link(NULL) {} }; // 查找最大节点及其前一个节点 void findMaxAndPrev(Node* list, Node*& maxNode, Node*& prevMax) { Node* curr = list; maxNode = list; prevMax = NULL; Node* prev = NULL; while (curr!= NULL) { if (curr->data > maxNode->data) { maxNode = curr; prevMax = prev; } prev = curr; curr = curr->link; } } // 将最大节点移到链表末尾 void moveMaxToEnd(Node*& list) { Node* maxNode = NULL; Node* prevMax = NULL; findMaxAndPrev(list, maxNode, prevMax); if (maxNode!= NULL && prevMax!= NULL) { prevMax->link = maxNode->link; Node* curr = list; while (curr->link!= NULL) { curr = curr->link; } curr->link = maxNode; maxNode->link = NULL; } } // 打印链表 void printList(Node* list) { Node* curr = list; while (curr!= NULL) { cout << curr->data << " "; curr = curr->link; } cout << endl; } // 构建链表 Node* buildList() { int num; cin >> num; Node* head = NULL; Node* tail = NULL; while (num!= -1) { Node* newNode = new Node(num); if (head == NULL) { head = newNode; tail = newNode; } else { tail->link = newNode; tail = newNode; } cin >> num; } return head; } int main() { Node* list = buildList(); moveMaxToEnd(list); printList(list); return 0; } ``` ######[AI写代码神器 | 583点数解答 | 2024-10-14 22:52:26]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]