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()
这是我的错误
答案 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
课程中取出