设有一个正整数序列组成的有序单链表,现在输入一个x值,然后,删除单链表中小于x的值。 输入 第一行:输入一组整数。 第二行:输入x值。 输出 第一行,输出删除前的单链表。 第二行:输出删除后的单链表。用c++写
时间: 2024-09-12 08:11:37 浏览: 25
要完成这个任务,首先需要定义一个单链表节点的结构体,然后实现一个插入函数用于构建初始的有序链表,接着实现一个删除函数用于删除小于x的节点,最后实现一个打印函数用于输出链表内容。
以下是使用C++编写的代码示例:
```cpp
#include <iostream>
using namespace std;
// 定义单链表节点结构体
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 插入节点,保持链表有序
void insertNode(ListNode *&head, int val) {
ListNode *newNode = new ListNode(val);
if (head == NULL || head->val >= val) {
newNode->next = head;
head = newNode;
} else {
ListNode *current = head;
while (current->next != NULL && current->next->val < val) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
}
// 删除小于x的节点
void deleteLessThanX(ListNode *&head, int x) {
ListNode *current = head;
ListNode *prev = NULL;
while (current != NULL) {
if (current->val < x) {
if (prev == NULL) {
head = current->next;
delete current;
current = head;
} else {
prev->next = current->next;
delete current;
current = prev->next;
}
} else {
prev = current;
current = current->next;
}
}
}
// 打印链表
void printList(ListNode *head) {
while (head != NULL) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
}
int main() {
ListNode *head = NULL;
int x;
int n, val;
// 读取整数数量
cin >> n;
// 读取整数并构建链表
for (int i = 0; i < n; ++i) {
cin >> val;
insertNode(head, val);
}
// 输出原始链表
printList(head);
// 读取x值
cin >> x;
// 删除小于x的节点
deleteLessThanX(head, x);
// 输出修改后的链表
printList(head);
return 0;
}
```
使用这段代码,你需要先输入一系列的整数,然后输入一个整数x,程序将按照要求删除链表中小于x的节点,并输出删除前后的链表。