删除无序单链表中所有值小于x的结点, c语言实现
时间: 2024-10-09 21:04:29 浏览: 42
无序单列表排序不改变结点的连接关系通过改变结点的值来排序C和指针第十二章编程练习4
删除单链表中所有值小于给定数 `x` 的节点,你可以通过遍历链表并在适当的时候删除节点来实现这个操作。这里是一个简单的 C 语言函数示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 删除小于 x 的节点
void removeNodesBelowX(Node** head, int x) {
if (*head == NULL) return; // 如果链表为空,直接返回
Node* current = *head;
while (current != NULL) {
if (current->data < x) { // 如果当前节点值小于 x
Node* temp = current; // 保存需要替换的节点
current = current->next; // 跳过此节点
free(temp); // 释放内存
} else {
current = current->next;
}
}
if (*head == NULL) { // 链表中所有节点都小于 x,清空链表
*head = NULL;
}
}
// 打印链表
void printList(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
// 初始化链表示例
Node* list = createNode(5);
list->next = createNode(3);
list->next->next = createNode(7);
list->next->next->next = createNode(4);
list->next->next->next->next = createNode(6);
int x = 5;
removeNodesBelowX(&list, x);
printList(list); // 输出结果应为: 7 6
return 0;
}
```
在这个例子中,`removeNodesBelowX` 函数接受头指针和值 `x` 作为输入,遍历链表并删除所有小于 `x` 的节点。`main` 函数展示了如何在实际应用中创建链表并调用该函数。
阅读全文