编写程序删除单链表中所有关键字值为x的元素
时间: 2023-04-16 20:02:14 浏览: 73
可以按照以下步骤编写程序删除单链表中所有关键字值为x的元素:
1. 定义一个单链表结构体,包含一个指向下一个节点的指针和一个存储关键字值的变量。
2. 定义一个函数,接受一个指向单链表头节点的指针和一个关键字值x作为参数。
3. 在函数中,遍历单链表,查找所有关键字值等于x的节点,并删除它们。
4. 删除节点的方法是将前一个节点的指针指向当前节点的下一个节点,然后释放当前节点的内存空间。
5. 最后返回指向新的单链表头节点的指针。
下面是一个简单的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
struct Node {
int key;
struct Node* next;
};
struct Node* deleteNodes(struct Node* head, int x) {
struct Node* prev = NULL;
struct Node* curr = head;
while (curr != NULL) {
if (curr->key == x) {
if (prev == NULL) {
head = curr->next;
} else {
prev->next = curr->next;
}
struct Node* temp = curr;
curr = curr->next;
free(temp);
} else {
prev = curr;
curr = curr->next;
}
}
return head;
}
int main() {
struct Node* head = malloc(sizeof(struct Node));
head->key = 1;
head->next = malloc(sizeof(struct Node));
head->next->key = 2;
head->next->next = malloc(sizeof(struct Node));
head->next->next->key = 3;
head->next->next->next = NULL;
printf("Before deletion: ");
struct Node* curr = head;
while (curr != NULL) {
printf("%d ", curr->key);
curr = curr->next;
}
printf("\n");
head = deleteNodes(head, 2);
printf("After deletion: ");
curr = head;
while (curr != NULL) {
printf("%d ", curr->key);
curr = curr->next;
}
printf("\n");
return ;
}
```
在这个示例代码中,我们首先创建了一个包含三个节点的单链表,然后调用deleteNodes函数删除了所有关键字值为2的节点。最后,我们打印出删除前后的单链表内容,以验证程序的正确性。