已知一个单向链表的头,请写出删除其某一个结点的算法,要求,先找到此 结点,然后删除。
时间: 2023-09-29 08:10:55 浏览: 192
实现在单链表中删去值相同的多余结点的算法.txt
单向链表的删除操作需要注意两个问题:
1. 如何找到要删除的结点。
2. 如何删除该结点。
对于第一个问题,我们可以从头结点开始遍历链表,直到找到目标结点。
对于第二个问题,我们需要将要删除结点的前驱结点的 next 指针指向要删除结点的后继结点,然后释放要删除结点的内存空间。
下面是单向链表删除结点的算法实现:
```C++
void deleteNode(ListNode* head, ListNode* target) {
if (head == nullptr || target == nullptr) {
return;
}
if (head == target) { // 如果要删除的结点是头结点
head = head->next;
delete target;
return;
}
ListNode* pre = head; // 找到要删除结点的前驱结点
while (pre->next != nullptr && pre->next != target) {
pre = pre->next;
}
if (pre->next == nullptr) { // 如果链表中没有该结点
return;
}
pre->next = target->next; // 删除该结点
delete target;
}
```
需要注意的是,如果要删除的结点是头结点,需要特殊处理,因为头结点没有前驱结点。
阅读全文