c语言 删除单链表中所有值为x的元素
时间: 2023-05-18 21:07:27 浏览: 143
可以使用双指针法来删除单链表中所有值为x的元素。具体实现如下:
```
void deleteNode(ListNode** head, int x) {
ListNode* dummy = new ListNode(0);
dummy->next = *head;
ListNode* prev = dummy;
ListNode* curr = *head;
while (curr != NULL) {
if (curr->val == x) {
prev->next = curr->next;
delete curr;
curr = prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
*head = dummy->next;
delete dummy;
}
```
其中,ListNode 是单链表的节点结构体,包含一个整数 val 和一个指向下一个节点的指针 next。函数 deleteNode 的参数是一个指向指针的指针 head,表示单链表的头节点的地址,以及一个整数 x,表示要删除的元素的值。函数的作用是删除单链表中所有值为 x 的元素。
函数首先创建一个虚拟头节点 dummy,将其 next 指针指向原来的头节点。然后使用双指针法遍历单链表,如果当前节点的值等于 x,则将前驱节点的 next 指针指向当前节点的后继节点,然后删除当前节点,继续遍历下一个节点;否则,更新前驱节点和当前节点的指针,继续遍历下一个节点。最后,将头节点的指针指向虚拟头节点的下一个节点,删除虚拟头节点,完成删除操作。
注意,这里使用了双指针法,可以在不使用额外空间的情况下删除单链表中的元素。