查找顺序表中的最大值,并将最大值移动到顺序表的末尾,用C++代码实现
时间: 2024-09-20 20:03:51 浏览: 89
C++实现基于静态数组的顺序表
5星 · 资源好评率100%
在C++中,我们可以使用线性查找找到顺序表(数组)中的最大值,然后将其与最后一个元素交换位置。以下是简单的示例代码:
```cpp
#include <iostream>
// 定义顺序表结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
// 寻找最大值并移到末尾
void moveMaxToTail(ListNode*& head) {
if (head == nullptr || head->next == nullptr) { // 如果列表为空或只有一个元素
return; // 直接返回
}
ListNode* maxNode = head;
ListNode* curr = head->next;
while (curr != nullptr) {
if (curr->val > maxNode->val) { // 更新最大值节点
maxNode = curr;
}
curr = curr->next;
}
// 将最大值移到末尾
if (maxNode != head) {
ListNode* temp = maxNode->next;
maxNode->next = nullptr; // 断开最大值与前一节点的连接
// 将最大值插入到头节点之后
head->next = maxNode;
maxNode->next = temp;
}
}
int main() {
ListNode* list = new ListNode(3);
list->next = new ListNode(1);
list->next->next = new ListNode(4);
list->next->next->next = new ListNode(2);
std::cout << "Before moving max to tail:\n";
printList(list); // 自己实现的打印链表函数
moveMaxToTail(list);
std::cout << "After moving max to tail:\n";
printList(list);
return 0;
}
// 打印链表辅助函数
void printList(ListNode* node) {
while (node != nullptr) {
std::cout << node->val << " -> ";
node = node->next;
}
std::cout << "nullptr\n";
}
```
这段代码首先初始化了一个顺序表,然后通过`moveMaxToTail`函数找到最大值并将其移到末尾。`printList`函数用于打印链表方便查看结果。
阅读全文