编写一个c++程序,在自定义函数中完成下列功能并在主函数中进行测试:(1) 建立一个空的单链表,并初始化: (2)用尾插法往链表里插入n个数据(数据类型及个数需自己定义),然后打印出来验证。 (3) 删除单链表中元素值最大的结点(假设这样的结点唯一),然后打印出来验证。
时间: 2024-09-27 11:06:39 浏览: 36
写自定义函数stringLower()实现将一个字符串中所有大写字母变为小写字母。在主函数中输入一含有大写字母的字符串,调用该函数并输出改变后的字符串。
5星 · 资源好评率100%
在C++中,你可以创建一个名为`ListNode`的结构体来表示链表节点,同时包含一个数据字段和指向下一个节点的指针。以下是实现这个功能的简单示例:
```cpp
#include <iostream>
// 定义链表节点
struct ListNode {
int data;
ListNode* next;
ListNode(int val = 0) : data(val), next(nullptr) {}
};
// 自定义函数:建立空链表
ListNode* createEmptyList() {
return nullptr; // 返回链表头节点,因为它是空的
}
// 自定义函数:插入n个元素到链表
void insertNodes(ListNode*& head, int n, int minValue) {
for (int i = 0; i < n; ++i) {
ListNode* newNode = new ListNode(minValue + i); // 创建新节点,初始值为minValue+i
if (head == nullptr) { // 如果链表为空,将新节点设置为头节点
head = newNode;
} else {
ListNode* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = newNode; // 将新节点添加到链表尾部
}
}
}
// 自定义函数:删除最大值节点并返回新的头节点
ListNode* deleteMaxNode(ListNode* head) {
ListNode* maxNode = head;
ListNode* temp = head;
if (maxNode != nullptr && maxNode->data > head->data) {
maxNode = maxNode->next;
}
while (temp != nullptr && temp->next != nullptr) {
if (temp->next->data > maxNode->data) {
maxNode = temp->next;
}
temp = temp->next;
}
if (temp != nullptr) {
temp->next = maxNode->next;
delete maxNode; // 删除最大值节点
}
return head;
}
// 主函数进行测试
int main() {
int n, minValue;
std::cout << "Enter the number of elements to insert and minimum value: ";
std::cin >> n >> minValue;
// 初始化链表
ListNode* head = createEmptyList();
// 插入元素
insertNodes(head, n, minValue);
std::cout << "Initial list after inserting: ";
printList(head);
// 删除最大值节点
head = deleteMaxNode(head);
std::cout << "List after deleting maximum element: ";
printList(head);
return 0;
}
// 辅助函数:打印链表
void printList(ListNode* node) {
while (node != nullptr) {
std::cout << node->data << " -> ";
node = node->next;
}
std::cout << "nullptr" << std::endl;
}
```
在这个程序中,用户输入要插入的元素数量以及最小值。首先创建一个空链表,然后插入指定数量的元素,接着删除最大值节点并打印结果。
阅读全文