无法访问python中链接列表中指定的值

时间:2018-01-21 17:17:45

标签: 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

我尝试访问特定元素的链接列表中的数据。 请你帮我浏览链表

3 个答案:

答案 0 :(得分:0)

您可以选择省略某些属性,但不能选择添加除定义属性之外的其他属性。

这个错误只是说在你使用它的地方不能使用属性data-width。

答案 1 :(得分:0)

您收到此错误是因为

l1=LinkedList()

创建一个名为l1的新链接列表,但您没有向其添加任何元素,它是一个空链表,其头部为无。

致电时

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

此代码应该按您的要求执行

答案 2 :(得分:0)

创建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