NameError: имя mergelist не определено

NameError: имя 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()

Это ошибка, которую я получаю

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
218
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы вызываете 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 и оператора ..

mergelist находится в классе linkedlist, поэтому вам придется называть его так:

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

Кроме того, поскольку mergelist на самом деле не использует self, вы можете украсить его как @staticmethod и не допускать, чтобы он принимал self в качестве первого аргумента, или вы можете просто вынуть его из класса linkedlist, как в ответе Шрини

Другие вопросы по теме