设计一个测试程序,通过数组 int a0={7,4,2,9,3,1,5}整体创建一个单链表L;输出单链表L,通过调用以上算法将最大值结点移到最前面成为首结点后,输出单链表L。
时间: 2024-10-29 12:16:24 浏览: 22
在 Blender 2.6 中导入,导出 .x 文件.zip
首先,我们需要编写一个函数来构造单链表,然后实现上述的`move`算法,最后再分别打印链表前后的状态。以下是使用C++语言的一个示例:
```cpp
#include <iostream>
using namespace std;
// 定义单链表节点结构
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 创建单链表函数
ListNode* createLinkedList(int arr[], int n) {
ListNode* head = new ListNode(arr[0]);
ListNode* tail = head;
for (int i = 1; i < n; i++) {
tail->next = new ListNode(arr[i]);
tail = tail->next;
}
return head;
}
// 输出链表函数
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != nullptr) {
cout << temp->val << " -> ";
temp = temp->next;
}
cout << "nullptr" << endl;
}
// 移动最大值到链表头部的函数
void moveMaxToHead(ListNode*& head) {
if (head == nullptr) return;
ListNode* max_node = head;
ListNode* current = head->next;
while (current != nullptr) {
if (current->val > max_node->val) {
max_node = current;
}
current = current->next;
}
// 将最大值插入到头部
ListNode* prev = head;
max_node->next = head;
while (prev->next != max_node) {
prev = prev->next;
}
head = max_node;
}
int main() {
int a[] = {7, 4, 2, 9, 3, 1, 5};
int n = sizeof(a) / sizeof(a[0]);
ListNode* L = createLinkedList(a, n);
cout << "Original linked list: ";
printList(L);
moveMaxToHead(L);
cout << "\nLinked list after moving max value to head: ";
printList(L);
return 0;
}
```
在这个程序中,我们首先通过`createLinkedList`函数将给定的数组转换成单链表,并打印原始链表。接着调用`moveMaxToHead`函数将最大值节点移至链表头部,再次打印链表结果。
阅读全文