在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首先檢查節點和其后一個節點是否存在,如果存在,就將后一個節點的值復制給當前節點,并刪除后一個節點。這種方法可以在常量時間內刪除指定節點,而不需要遍歷整個鏈表。