python-3.x - 通过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
此代码不起作用。谁能告诉我我应该对递归规则进行哪些更改?谢谢!
解决方案
请更具体地说明您遇到的问题。您看到的错误/消息/结果是什么?是否有错误被抛出,或者结果不是你所期望的?
有很多可能导致它无法正常工作。首先,我认为你不需要这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
推荐阅读
- debugging - gdb/lldb 无法访问 jit 代码的内存地址
- c++ - gRPC (cpp) - 如何检查 RPC 通道是否连接成功?
- google-api - 当用户在谷歌日历事件中提出新时间时,他们是否可以通过 API 知道这一点?
- python - 试图滚动到弹出页面窗口的底部
- c# - 如果客户端被禁用,则请求拒绝 OpenIdConnect 的事件
- ios - Visual Studio Mac xamarin ios 故事书不适用于 XCode 12
- javascript - 扩展到父级时如何使字体大小变小
- javascript - 用于检查 html5 中素数的 Web Worker 用法
- redis - Gitlab CI中配置Redis主从架构(跨服务通信)
- pandas - 如何在 Pyplot 中禁用 x_axis 标签?