从函数传递的Python3对象

时间:2014-01-04 19:56:41

标签: class object python-3.x linked-list

以下代码段用于删除链接列表中的节点。我的类包含两个成员,即datanext一个指针,用于保存该类类型的其他对象。什么时候,我运行我的程序,我没有得到任何错误。如果我尝试删除链表中的第一项,它将进入First for循环并显示消息“找到数据”。但是如果我打印我的列表,我会看到列表中的元素。我认为这是因为重新分配对象,但我无法找到我做错的地方。非常感谢任何帮助。

def deleteNode(self, a_data):
        flag = 0


        if (self.data == a_data):
            print("The data is found")
            self = self.next
            flag = 1

        else:

            while(self.next != None):

                if (self.next.data == a_data):

                    self.next = self.next.next
                    flag = 1
                    break

                else:

                    self = self.next

        if(flag):
            print("Data Deleted")
        else:
            print("Data not available")

由于

2 个答案:

答案 0 :(得分:1)

代码中的

self = self.next对外界没有影响:它只是分配给本地变量。

看起来您正在尝试从Node类本身中删除节点。您可以使用一个接受列表头的函数,并返回一个(可能是新的)列表头,并删除相应的项目:

def delete_node(head, data):
    """Delete the first node in the `head` list that has `data`."""
    prev, node = None, head
    while node is not None: # until the last node (`None` means empty list)
        if node.data == data: # found node that has data
           if prev is None: # we are at the very beginning of the list
              assert head is node
              head = node.next # remove the first node
           else:
              assert prev.next is node
              prev.next = node.next # remove internal node
           break
        prev, node = node, node.next
    return head

答案 1 :(得分:0)

我修改了我的功能。我认为错误可能是因为没有将值赋给原始值,所以我让我的函数返回值。我们热烈欢迎您的评论和其他方法以及任何其他原因。

def deleteNode(self, a_data):
        flag = 0


        if (self.data == a_data):
            print("The data is found")
            self = self.next
            flag = 1

        else:

            while(self.next != None):

                if (self.next.data == a_data):

                    self.next = self.next.next
                    flag = 1
                    break

                else:

                    self = self.next

        if(flag):
            print("Data Deleted")
        else:
            print("Data not available")

        return self

由于 小号