【发布时间】:2017-06-10 05:26:53
【问题描述】:
class Node:
def __init__(self,data):
self.data=data
self.link=None
class UnOrdered:
def __init__(self):
self.head=None
def add(self,data):
new=Node(data)
ptr=self.head
if self.head==None:
self.head=new
else:
temp=ptr
while ptr!=None: #I want to write "while ptr!=None or
#ptr.data<new.data"
temp=ptr
ptr=ptr.link
p=temp.link
temp.link=new
new.link=p
def show(self):
if self.head==None:
print("No nodes")
else:
q=self.head
while q!=None:
print(q.data, end=" ")
q=q.link
ul=UnOrdered()
ul.add(3)
ul.add(5)
ul.add(4)
ul.add(11)
ul.add(10)
ul.add(5)
ul.show()
我正在尝试为有序链表创建一个程序,为此我需要在“add”方法中描述的 while 循环中编写多个条件。 但是使用多个条件会给我以下错误: 当 ptr!=None 或 ptr.data AttributeError:“NoneType”对象没有属性“数据”
【问题讨论】:
-
@Christian Dean 但是,一旦我使用 add 函数插入 3,我的 self.head 就指向创建的新节点,并且不再是 None。如果我错了,请纠正我?
-
您的权利。我犯了一个错误。您的实际 问题是您在
while循环中使用or。这意味着无论您的测试是否失败(ptr!=None),while 语句的第二部分都会运行(ptr.data < new.data)。您需要改用and,因此只有在测试成功时才尝试从ptr访问data(例如,您知道ptr不是None)。附带说明一下,在使用布尔值和无类型值进行测试时,请使用is和is not而不是==和!=。 -
请复制粘贴您的错误。
标签: python data-structures singly-linked-list