链表的增删
向链表中插入元素
如果我们插入的位置不是头部,那么首先需要拿到插入位置前面的结构体,并令指针 prev 指向它。随后,用 temp 指向一个新生成的结构体,调整它们 next 指向的位置即可。
Node* temp{new Node{}};
temp->next = prev->next;
prev->next = temp;

如果插入的位置是头部,则需要修改 head 指针指向的位置。
Node* temp{new Node{}};
temp->next = head;
head = temp;
从链表中删除元素
同样地,删除一个节点也需要先拿到前面的节点,令 prev 为指向前面那个节点的指针。同样地,令 temp 指向要删除的节点,随后调整 next 指针。最后别忘记释放 temp 这片内存。
Node* temp{prev->next};
prev->next = temp->next;
delete temp;

删除 head 指向的头结点是同样的道理。
Node* temp{head};
head = temp->next;
delete temp;
链表的释放
我们使用完一个链表务必要将其所有节点占用的存储空间都释放掉。最典型的方法是,从头到尾一个一个删掉,直到 nullptr 尾部为止。
void freeList(Node* head) {
    Node* current{};
    while (head) {
        current = head;
        head = head->next;
        delete current;
    }
}
当链表长度比较小时,用递归也是可以的: