12.编程实现单链表删除节点(该数据为num)node "del(node *head, int num) {}
时间: 2024-09-11 21:06:31 浏览: 46
用C++编写的双向链表程序示例.doc
在编程中,特别是使用结构体表示链表的情况下,删除给定值`num`的节点通常涉及以下几个步骤:
1. 首先,创建两个指针变量,`prev`用于存储当前节点的前一个节点,初始时设为`NULL`,`current`指向头节点`head`。
2. 进入循环,遍历链表,直到找到目标节点:
- 如果`current`不是`NULL`,并且它的数据等于`num`,则找到了需要删除的节点。
- 否则,将`prev`更新为`current`,然后`current`向前移动到下一个节点。
3. 当找到目标节点时,有几种情况处理:
- 如果这是第一个节点(即`prev`是`NULL`),那么直接将头节点设置为`current->next`,释放掉已经被标记为删除的节点。
- 如果这不是第一个节点,那么将`prev->next`设置为`current->next`,跳过被删除的节点。
4. 最后,如果链表遍历结束都没有找到值为`num`的节点,说明不需要删除任何内容,可以直接跳出函数。
以下是一个简单的伪代码示例:
```c++
void deleteNode(node **head, int num) {
node *prev = NULL;
node *current = *head;
while (current != NULL && current->data != num) {
prev = current;
current = current->next;
}
if (current == NULL) return; // 没找到对应节点
if (prev == NULL) { // 删除头节点
*head = current->next;
} else {
prev->next = current->next;
}
free(current); // 释放内存
}
```
阅读全文