首页 > 解决方案 > 通过Python删除单链表中所有节点值为'x'

问题描述

def dele(node,target):
 if not node:
     return
 if node.val == target:
     node.next = node.next.next
     node.next = None
 dele(node.next,target)
 return node

此代码不起作用。谁能告诉我我应该对递归规则进行哪些更改?谢谢!

标签: python-3.xrecursionlinked-list

解决方案


请更具体地说明您遇到的问题。您看到的错误/消息/结果是什么?是否有错误被抛出,或者结果不是你所期望的?

有很多可能导致它无法正常工作。首先,我认为你不需要这node.next = node.next.next条线,因为无论如何你都设置node.next为 None 。您还需要存储某种临时节点,以便您跟踪前一个节点,因为next如果您删除其next节点,则需要修改其字段。

我还没有测试,但你可以尝试类似:

def dele(node,target, prev):
 if not node:
     return
 if node.val == target:
     # set the previous node's next field to the current node's next field so that we skip over the current node (which we're removing) when iteraitng over the list
     prev.next = node.next
     # set current node to None
     node = None
     # continue to next node, passing in the node preceding this node (since we're deleting this node, the node before it will also be the node before the next item in the list)
     dele(node.next,target, prev)
 else:
     # keep running on the next node, but pass the current one as previous, as we don't delete it
     dele(node.next, target, node)
 return node

推荐阅读