C++程序 在链表中删除节点
让我们来制定一个问题陈述,以了解删除过程。 给定一个关键字,“删除”链表中第一个这个关键字的出现 。
迭代方法:
要从链表中删除一个节点,我们需要执行以下步骤。
1)找到要删除的节点的前一个节点。
2)更改前一个节点的下一个节点。
3)释放要删除的节点的内存。
输出
时间复杂度: O(n),其中n表示给定链表的长度。
辅助空间: O(1),不需要额外空间,因此是一个常数。
递归方法:
为了递归地删除链表的一个节点,我们需要执行以下步骤。
1.我们将node*
(节点指针)作为函数的引用传递(如node* &head)。
2.现在,由于当前节点指针是从前一个节点的next派生的(它通过引用传递),因此现在如果当前节点指针的值已更改,则前一个next节点的值也会发生更改,这是删除节点所需的操作(即使前一个节点的下一个指向当前节点,包含关键字的下一个指向)。
3.查找包含给定值的节点。
4.存储此节点以稍后使用free()函数进行解除分配。
5. 改变该节点指针,使其指向其下一个节点,并通过此操作将上一个节点的下一个节点正确链接。
以下是上述方法的实现。
输出
时间复杂度: O(n),其中n表示给定链表的长度。
辅助空间: O(n),由于递归调用栈,其中n表示给定链表的长度。