python链表中删除一个节点数据_如何使用Python从链表中删除给定节点

显而易见的解决方案是:def delete_by_index(node, index):

for _ in range(index):

prev_node, node = node, node.next

prev_node.next = node.next

但是,这将无法删除第一个节点。为了做到这一点,您需要让它返回新的列表头,它通常是旧的列表头,但是在您删除头的情况下,它将是旧的第二个节点。所以:def delete_by_index(node, index):

if not index:

return node.next

head = node

for _ in range(index):

prev_node, node = node, node.next

prev_node.next = node.next

return head

如何简化这一点应该是显而易见的,你应该这样做。

另一个选择是去掉“搜索”和“删除”部分。编写一个nth函数(这应该很简单),然后您可以执行以下操作:def delete_by_index(node, index):

if not index:

return node.next

prev_node = nth(node, index-1)

prev_node.next = prev_node.next.next

return node

如果您知道递归函数,您可能还想知道如何递归地编写delete_by_index或nth(这是最容易编写的递归函数之一)。

您可能还希望捕获由于删除10节点列表中的第15个节点而导致的错误,并使其变得更好。弄清楚在这种情况下会得到什么错误(或者,如果你不能弄清楚,只需运行它并查看),然后try/except,然后引发一个IndexError。

在这个过程中,您可能需要添加一个delete_by_data(node, data)函数和一个delete_by_identity(node, child_node)函数,以便进一步练习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值