推荐答案
-- -------------------- ---- ------- ----- --------- --- -------------- ------ ----------- -------- - --- --------- - ---- --- ----------------- -- ---- -- ---- -- --------- -- ----- ------ -------- - ------------- --------- - --------------展开代码
本题详细解读
问题描述
在链表中删除一个节点,通常我们只给出要删除的节点本身,而不是链表的头节点。这意味着我们无法直接访问该节点的前一个节点。
解题思路
由于我们无法访问前一个节点,因此无法直接通过修改前一个节点的 next
指针来删除当前节点。我们可以通过以下步骤来间接删除节点:
- 复制下一个节点的值:将当前节点的值替换为下一个节点的值。
- 删除下一个节点:将当前节点的
next
指针指向下一个节点的下一个节点。
代码解析
ListNode
类定义了链表节点的结构,包含val
(节点的值)和next
(指向下一个节点的指针)。deleteNode
函数接受一个节点作为参数,表示要删除的节点。- 首先检查节点是否为空或是否为链表的最后一个节点。如果是,则直接返回,因为无法删除。
- 然后将当前节点的值替换为下一个节点的值。
- 最后将当前节点的
next
指针指向下一个节点的下一个节点,从而跳过下一个节点,达到删除的效果。
注意事项
- 这种方法不适用于删除链表的最后一个节点,因为无法通过复制下一个节点的值来删除最后一个节点。
- 如果链表只有一个节点,且要删除该节点,则无法使用此方法。
时间复杂度
- 时间复杂度为 O(1),因为我们只需要进行常数次操作来删除节点。
空间复杂度
- 空间复杂度为 O(1),因为我们没有使用额外的空间。