微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

递归删除链表中的节点

如何解决递归删除链表中的节点

以下代码使用迭代删除链表中的节点。 现在我想使用递归删除一个节点:

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 举报,一经查实,本站将立刻删除。