NameError:name' mergelist'没有定义

时间:2018-04-24 17:33:01

标签: python-3.x data-structures

NameError:name' mergelist'未定义 **这里我已经正确地提到了mergelist并且已经传递了相同的参数,但它仍然显示NameError,我无法理解我错在哪里**

class node:
    def __init__(self, data):
        self.data=data
        self.head=None
class linkedlist:
    def __init__(self):
        self.head=None
    def push(self, newdata):   
        newnode=node(newdata)
        newnode.next=self.head
        self.head=newnode
    def mergelist(self, l1, l2):
        dummy=listnode(0)
        pointer=dummy
        while(l1 and l2):
            if l1.data<=l2.data:
                pointer.next=l1
                l1=l1.next
            else:
                pointer.next=l2
                l2=l2.next
            pointer=pointer.next
        if l1 == None:
            pointer.next = l2
        else:
            pointer.next = l1
        return dummy.next   
    def printlist(self):
        temp=self.head
        while(temp):    

            print(temp.data)
            temp=temp.next            
llist1=linkedlist()
llist1.push(4)  
llist1.push(9)    
llist1.push(7)    
llist1.push(5)    
llist1.push(4)   

llist2=linkedlist() 
llist2.push(32)  
llist2.push(12)
llist2.push(1)
llist2.push(2)
llist2.push(8)
llist1.printlist()
llist2.printlist() 

llist3=linkedlist()
llist3.head=mergelist(llist1.head, llist2.head)

llist3.printlist()

这是我的错误

2 个答案:

答案 0 :(得分:1)

mergelist实际上是在一个类(更具体地说是llist3.head=mergelist(llist1.head, llist2.head)类中定义的内容时,您正在调用linkedlist作为此mergelist之类的全局函数。您有一个选择是将class node: def __init__(self, data): self.data=data self.head=None class linkedlist: def __init__(self): self.head=None def push(self, newdata): newnode=node(newdata) newnode.next=self.head self.head=newnode def printlist(self): temp=self.head while(temp): print(temp.data) temp=temp.next def mergelist(l1, l2): dummy=listnode(0) pointer=dummy while(l1 and l2): if l1.data<=l2.data: pointer.next=l1 l1=l1.next else: pointer.next=l2 l2=l2.next pointer=pointer.next if l1 == None: pointer.next = l2 else: pointer.next = l1 llist1=linkedlist() llist1.push(4) llist1.push(9) llist1.push(7) llist1.push(5) llist1.push(4) llist2=linkedlist() llist2.push(32) llist2.push(12) llist2.push(1) llist2.push(2) llist2.push(8) llist1.printlist() llist2.printlist() llist3=linkedlist() llist3.head=mergelist(llist1.head, llist2.head) llist3.printlist() 移到外面,如此

listnode

当然,您现在有新的错误,例如mergelist没有被定义。但我认为你知道如何定义它们。

您拥有的另一个选项是通过为linkedlist对象和.运算符添加前缀来调用Step Function

答案 1 :(得分:0)

mergelist属于linkedlist级,因此您必须像这样调用它:

llist3.head = linkedlist.mergelist(llist1.head, llist2.head)

此外,由于mergelist实际上并未使用self,因此您可以将其装饰为@staticmethod而不接受self作为第一个参数,或者你可以像在Srini的回答中那样将它从linkedlist课程中取出