在C++中,删除单链表中的节点通常需要维护前一个节点以及当前节点。以下是一个删除单链表中特定节点的示例代码:
#include <iostream>
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
void deleteNode(ListNode* node) {
if (node != nullptr && node->next != nullptr) {
ListNode* temp = node->next;
node->val = temp->val;
node->next = temp->next;
delete temp;
}
}
int main() {
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
// 删除第二个节点
deleteNode(head->next);
// 打印剩余节点
ListNode* curr = head;
while (curr != nullptr) {
std::cout << curr->val << " ";
curr = curr->next;
}
return 0;
}
在上面的示例中,删除节点的函数deleteNode
首先检查节点和其后一个节点是否存在,如果存在,就将后一个节点的值复制给当前节点,并删除后一个节点。这种方法可以在常量时间内删除指定节点,而不需要遍历整个链表。