温馨提示×

c++ listnode删除节点的技巧

c++
小樊
94
2024-07-24 14:23:12
栏目: 编程语言

在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首先检查节点和其后一个节点是否存在,如果存在,就将后一个节点的值复制给当前节点,并删除后一个节点。这种方法可以在常量时间内删除指定节点,而不需要遍历整个链表。

0