用C语言删除小于x的元素 Description 设有一个正整数序列组成的有序单链表,现在输入一个x值,然后,删除单链表中小于x的值。 Input 第一行:输入一组整数。 第二行:输入x值。 Output 第一行,输出删除前的单链表。 第二行:输出删除后的单链表。
时间: 2024-09-18 11:13:41 浏览: 36
在C语言中,可以使用遍历链表的方式,结合指针操作来删除小于给定值x的元素。这里提供一种简单的算法步骤:
1. 定义链表结构体,包含一个整数值和指向下一个节点的指针。
```c
typedef struct Node {
int data;
struct Node* next;
} ListNode;
```
2. 创建函数`deleteElements(ListNode** head, int x)`来处理删除操作。它接收链表头节点的地址以及目标值x作为参数。
3. 遍历链表,如果当前节点的数据小于x,将当前节点替换为其后继节点;否则,继续遍历。当找到大于等于x的第一个节点或到达链表末尾时,返回头节点。
```c
ListNode* deleteElements(ListNode** head, int x) {
if (*head == NULL) return *head;
// 如果头节点数据小于x,直接移动头指针
if ((*head)->data < x) {
ListNode* temp = *head;
*head = (*head)->next;
free(temp);
return deleteElements(head, x); // 继续递归处理剩余部分
}
// 否则,正常遍历并调整链表
ListNode* curr = *head;
while (curr->next != NULL && curr->next->data < x) {
curr = curr->next;
}
return curr; // 当遍历到大于等于x的节点或链表结束时,返回该节点
}
```
4. 调用函数后,你可以打印出链表的内容,例如使用一个辅助函数`printList(ListNode* head)`来输出链表。
5. 示例:
```c
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
// 主程序入口
int main() {
// 初始化链表...
ListNode* head = ...;
int x = ...;
ListNode* newHead = deleteElements(&head, x);
printList(newHead);
return 0;
}
```
阅读全文