Ordered Linked list.while循环中的多个条件给出错误

时间:2017-06-10 05:26:53

标签: python data-structures singly-linked-list

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()

我正在尝试为有序链表创建一个程序,为此我需要在&#34; add&#34;中描述的while循环中编写多个条件。方法。 但是使用多个条件会给我以下错误: while ptr!= None或ptr.data AttributeError:&#39; NoneType&#39;对象没有属性&#39;数据&#39;

1 个答案:

答案 0 :(得分:1)

发生这种情况的原因在于如何评估表达式ptr!=None or ptr.data < new.data

首先它会检查ptr!=None。如果它是None(即表达式的计算结果为False),那么它将移动到or的另一侧并评估ptr.data < new.data。由于我们已经知道它是None,因此它会尝试访问data的{​​{1}}属性,然后崩溃。

不幸的是,这意味着您要在None条件中使用的表达式是不可能的。 您将需要使用不同的表达式 - 类似while这样的表达式是有效的,因为如果while ptr!=None and ptr.data < new.data为None,则表达式将短路并且永远不会尝试评估ptr