如何解决递归删除链表中的节点
以下代码使用迭代删除链表中的节点。 现在我想使用递归删除一个节点:
def delete(self,key):
temp = self.head
if (temp is not None):
if temp.data == key:
self.head = temp.next
temp = None
return
if temp is None:
return
while (temp is not None):
if temp.data == key:
break
prev = temp
temp = temp.next
prev.next = temp.next
temp = None
我不知道如何使这个递归......
解决方法
def deleteNode(root,key):
if not root:
return None
if root.data == key: # delete the first node of linked list
return root.next
if root.next:
next = deleteNode(root.next,key)
root.next = next
return root
,
在这里我试图纠正它。您需要在 break 之前分配 prev,因为 break 将退出循环,并且在某些情况下永远不会分配 prev 和 temp。
def delete(self,key):
temp=self.head
if(temp is not None):
if temp.data==key:
self.head=temp.next
temp=None
return
if temp is None:
return
while(temp is not None):
prev=temp
temp=temp.next
if temp.data==key:
break
prev.next=temp.next
temp=None
,
首先,当列表中没有找到数据时,您的代码会遇到异常。其次,没有必要在退出函数之前执行csv
。
为了解决第一个问题,迭代函数可以是:
temp = None
递归版本:
def deleteNode(self,key):
prev = None
node = self.head
while node and node.data != key:
prev = node
node = node.next
if node == self.head:
self.head = node.next
elif node:
prev.next = node.next
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。