编写程序删除单链表中,所有关键字只为X的元素
时间: 2023-05-21 14:03:40 浏览: 101
可以使用双指针法,遍历单链表,如果当前节点的值等于X,则删除该节点。具体实现可以参考以下代码:
```
void deleteNode(ListNode* &head, int x) {
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* prev = dummy;
ListNode* curr = head;
while (curr != nullptr) {
if (curr->val == x) {
prev->next = curr->next;
delete curr;
curr = prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
head = dummy->next;
delete dummy;
}
```
其中,head是单链表的头指针,x是要删除的关键字。使用dummy节点可以避免删除头节点的特殊情况。prev和curr分别指向当前节点的前驱和后继,如果当前节点的值等于x,则删除该节点,否则继续遍历。最后更新头指针并释放dummy节点。
相关问题
编写程序删除单链表中所有关键字值为x的元素
可以按照以下步骤编写程序删除单链表中所有关键字值为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的节点。最后,我们打印出删除前后的单链表内容,以验证程序的正确性。
阅读全文