设有一个正整数序列组成的有序单链表,现在输入一个x值,然后,删除单链表中小于x的值。 输入 第一行:输入一组整数。 第二行:输入x值。 输出 第一行,输出删除前的单链表。 第二行:输出删除后的单链表。用c语言
时间: 2024-09-12 19:11:41 浏览: 61
要实现这个功能,你需要编写一个C语言程序,该程序首先读取一组整数并构造一个有序单链表,然后读取一个x值,并删除链表中所有小于x的节点。以下是实现该功能的步骤和示例代码:
1. 定义单链表的节点结构体,包含整数数据和指向下一个节点的指针。
2. 实现创建单链表的函数,从标准输入读取整数并按顺序插入到链表中。
3. 实现删除小于x值的节点的函数。
4. 实现打印单链表的函数。
5. 在主函数中,按照输入要求执行上述步骤,并按输出要求打印结果。
以下是C语言的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表节点结构体
struct ListNode {
int val;
struct ListNode *next;
};
// 创建节点
struct ListNode* createNode(int val) {
struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
newNode->val = val;
newNode->next = NULL;
return newNode;
}
// 向单链表中插入节点,保持链表有序
void insertNode(struct ListNode** head, int val) {
struct ListNode* newNode = createNode(val);
struct ListNode* current = *head;
struct ListNode* prev = NULL;
while (current != NULL && current->val < val) {
prev = current;
current = current->next;
}
if (prev == NULL) { // 插入到链表头部
newNode->next = *head;
*head = newNode;
} else {
prev->next = newNode;
newNode->next = current;
}
}
// 删除链表中小于x的节点
void deleteLessThanX(struct ListNode** head, int x) {
struct ListNode *current = *head, *prev = NULL;
while (current != NULL) {
if (current->val < x) {
if (prev == NULL) {
*head = current->next;
free(current);
current = *head;
} else {
prev->next = current->next;
free(current);
current = prev->next;
}
} else {
prev = current;
current = current->next;
}
}
}
// 打印链表
void printList(struct ListNode* head) {
struct ListNode* current = head;
while (current != NULL) {
printf("%d ", current->val);
current = current->next;
}
printf("\n");
}
// 释放链表内存
void freeList(struct ListNode* head) {
struct ListNode* temp;
while (head != NULL) {
temp = head;
head = head->next;
free(temp);
}
}
int main() {
struct ListNode* head = NULL;
int val;
// 读取整数构造链表
while (scanf("%d", &val) == 1) {
insertNode(&head, val);
}
// 读取x值
int x;
scanf("%d", &x);
// 打印删除前的链表
printf("删除前的链表:\n");
printList(head);
// 删除链表中小于x的节点
deleteLessThanX(&head, x);
// 打印删除后的链表
printf("删除后的链表:\n");
printList(head);
// 释放链表内存
freeList(head);
return 0;
}
```
请确保在编译和运行上述代码之前,你的系统已经安装了C语言的编译环境,并且你使用的是标准C库。这个代码应该能够在大多数C语言环境下正常运行。
阅读全文