c++:编写一个程序,在自定义函数中完成下列功能并在主函数中进行测试: (1) 建立一个空的单链表,并初始化; (2)用尾插法往链表里插入n个数据(数据类型及个数需自己定义),然后打印出来验证。 (3)删除单链表中元素值最小的结点(假设这样的结点唯一),然后打印出来验证
时间: 2024-10-09 18:02:01 浏览: 32
在 C++ 中,我们可以使用结构体表示链表节点,并实现相关的操作。这里是一个简单的示例程序,用于创建、插入和删除单链表中的节点:
```cpp
#include <iostream>
using namespace std;
// 定义链表节点结构体
struct ListNode {
int data; // 数据域
ListNode* next; // 指针域,指向下一个节点
};
// 初始化一个空链表
ListNode* createEmptyList() {
return nullptr;
}
// 尾插法插入节点
void insertNode(ListNode*& head, int value) {
if (head == nullptr) {
head = new ListNode{value, nullptr};
} else {
ListNode* newNode = new ListNode{value, nullptr};
newNode->next = head;
head = newNode;
}
}
// 打印链表
void printList(ListNode* head) {
while (head != nullptr) {
cout << head->data << " ";
head = head->next;
}
cout << endl;
}
// 删除最小节点并返回新的头节点
ListNode* deleteMinNode(ListNode*& head) {
if (head == nullptr || head->next == nullptr) {
return head;
}
ListNode* minNode = head;
ListNode* temp = head->next;
while (temp != nullptr && temp->data < minNode->data) {
minNode = temp;
temp = temp->next;
}
if (minNode == head) { // 如果最小节点就是头节点
head = head->next;
} else {
minNode->next = minNode->next->next;
}
return head;
}
int main() {
int n;
cout << "请输入要插入的元素个数: ";
cin >> n;
ListNode* head = createEmptyList();
for (int i = 0; i < n; ++i) {
int value;
cout << "请输入第 " << i+1 << " 个元素: ";
cin >> value;
insertNode(head, value);
}
cout << "原始链表: ";
printList(head);
head = deleteMinNode(head);
cout << "删除最小元素后的链表: ";
printList(head);
return 0;
}
```
在这个程序中,我们首先创建了一个空链表,然后通过循环从用户那里获取输入,并将每个元素插入到链表的末尾。删除最小节点部分则遍历整个链表找到最小值,更新指针以跳过这个节点。最后,分别展示了原始链表和删除最小节点后的链表。运行这个程序,你可以看到链表的操作效果。
阅读全文