以下是解题思路和 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; } ``` [2024-10-14 22:52:26 | AI写代码神器 | 583点数解答]