📜  C++ |新增和删除|问题4(1)

📅  最后修改于: 2023-12-03 14:59:48.063000             🧑  作者: Mango

C++ | 新增和删除 | 问题4

在C++中,新增和删除操作是非常常见的。本文旨在介绍如何在C++中进行新增和删除操作,包括如何新增和删除数组元素、如何新增和删除链表节点等。

新增操作
数组的新增操作

对于数组的新增操作,我们需要知道要新增的元素的位置和要新增的元素的值。如果要将某个元素插入到数组的指定位置,我们需要将数组的后面的元素全部向后移动一位,然后将要新增的元素插入到指定位置。具体代码如下:

void insert_element(int arr[], int len, int pos, int value) {
    for (int i = len-1; i >= pos; i--) {
        arr[i+1] = arr[i];
    }
    arr[pos] = value;
}

在上述代码中,arr是要进行新增操作的数组,len是数组的长度,pos是要插入元素的位置,value是要插入的元素的值。首先,我们从数组的最后一个元素开始遍历,将每个元素向后移动一位,直到要插入的位置。然后,将要插入的元素插入到指定的位置。

链表的新增操作

对于链表的新增操作,我们需要知道要新增的节点的位置和要新增的节点的值。如果要将一个节点插入到链表的指定位置,我们需要先找到指定位置的前一个节点,然后将新节点插入到前一个节点的后面。具体代码如下:

struct ListNode {
    int val;
    ListNode* next;
    ListNode(int val): val(val), next(nullptr) {}
};

void insert_node(ListNode* head, int pos, int value) {
    ListNode* cur = head;
    for (int i = 0; i < pos-1; i++) {
        cur = cur->next;
    }
    ListNode* new_node = new ListNode(value);
    new_node->next = cur->next;
    cur->next = new_node;
}

在上述代码中,head是链表的头节点,pos是要插入节点的位置,value是要插入的节点的值。首先,我们从链表的头节点开始遍历,找到要插入位置的前一个节点。然后,创建一个新节点并将其插入到前一个节点的后面。

删除操作
数组的删除操作

对于数组的删除操作,我们需要知道要删除的元素的位置。如果要删除数组的指定位置的元素,我们需要将数组后面的元素全部向前移动一位,然后将要删除的元素覆盖掉。具体代码如下:

void delete_element(int arr[], int len, int pos) {
    for (int i = pos+1; i < len; i++) {
        arr[i-1] = arr[i];
    }
}

在上述代码中,arr是要进行删除操作的数组,len是数组的长度,pos是要删除元素的位置。我们从要删除的元素的下一个元素开始遍历,将后面的元素全部向前移动一位。最后,将要删除的元素留出的位置赋值为0。

链表的删除操作

对于链表的删除操作,我们需要知道要删除的节点的位置。如果要删除链表的指定位置的节点,我们需要找到该节点的前一个节点,然后将前一个节点的next指针指向该节点的下一个节点。具体代码如下:

void delete_node(ListNode* head, int pos) {
    ListNode* cur = head;
    for (int i = 0; i < pos-1; i++) {
        cur = cur->next;
    }
    cur->next = cur->next->next;
}

在上述代码中,head是链表的头节点,pos是要删除节点的位置。我们从链表的头节点开始遍历,找到要删除节点的前一个节点。然后,将前一个节点的next指针指向要删除节点的下一个节点,从而完成删除操作。

总结起来,无论是数组还是链表,新增和删除操作都是非常常见的。掌握了这些操作,我们就能更加灵活地操作数据结构。