无法访问在python的链表中分配的值

2024-04-27 04:21:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我被指派删除一个链表中的元素,其总和为0。我试过这个密码。但我有个错误 “AttributeError:'NoneType'对象没有属性'data'”

import random
class Node :
    def __init__( self, data ) :
        self.data = data
        self.next = None
        self.prev = None
    def givedata(self):
        return self.data    

class LinkedList :
    def __init__( self ) :
        self.head = None        

    def add( self, data ) :
        node = Node( data )
        if self.head == None :  
            self.head = node
        else :
            node.next = self.head
            node.next.prev = node                       
            self.head = node            

    def search( self, k ) :
        p = self.head
        if p != None :
            while p.next != None :
                if ( p.data == k ) :
                    return p                
                p = p.next
            if ( p.data == k ) :
                return p
        return None

    def remove( self, p ) :
        tmp = p.prev
        p.prev.next = p.next
        p.prev = tmp

    def list_print(self):
        node = self.head 
        while node:
            print (node.data,end=" ")
            node = node.next

    def getdata(self):
        self.nodedata=self.head
        return self.nodedata.data

脚本:

ll=LinkedList()
for i in range(random.randint(2,10)):
    ll.add(random.randint(-50,50))  
ll.list_print()
print('\n')
l1=LinkedList()
while ll:
  while l1:
     if l1.getdata()+ll.getdata()==0:
            print("0\n")#just to know if this works or not
        l1=l1.head.next
   ll=ll.head.next

我试图访问特定元素的链表中的数据。 你能帮我浏览一下链表吗


Tags: selfnonenodel1datareturnifdef
3条回答

您可以选择省略某些属性,但不能选择添加超出已定义属性的其他属性。你知道吗

这个错误只是说属性数据宽度不能在您使用它的地方使用。你知道吗

你得到这个错误是因为

l1=LinkedList()

创建一个名为l1的新链表,但您没有向其中添加任何元素,它是一个头部为None的空链表。你知道吗

当你打电话的时候

l1.getdata()

你看到那个错误了吗

编辑

ll=LinkedList()
for i in range(random.randint(2,10)):
    ll.add(random.randint(-50,50))  
ll.list_print()
print('\n')
ptr1 = ll.head
while ptr1:
  ptr2 = ptr1.next
  while ptr2:
     if ptr1.data+ptr2.data == 0:
            print("0\n")#just to know if this works or not
        ptr2 = ptr2.next
   ptr1 = ptr1.next

这段代码应该是你想要的

创建l1 = LinkedList()时,.head被初始化为None。调用.getdata()时会出现问题,因为该方法试图调用self.head.data,这相当于调用None.data。你知道吗

可以使用以下方法修复.getdata方法:

def getdata(self):
    self.nodedata=self.head
    if not self.nodedata:
        return 0
    return self.nodedata.data

相关问题 更多 >