После объединения двух отсортированных связанных списков ни один не добавляется в конец вновь созданного списка

#python #algorithm #data-structures #linked-list

#python #алгоритм #структуры данных #связанный список

Вопрос:

Класс Node используется для создания печати node и linklist, а методы merge2LinkLists являются вспомогательными функциями.

Я повторяю и проверяю из каждого списка, чтобы убедиться, что оба отсортированных связанных списка объединены в новый список.

 class Node:
    def __init__(self,data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None
        self.size = 0
        self.tail = None

    def printLinkList(self):
        curr = self.head
        while(curr):
            print(curr.data, end=" ")
            curr = curr.next



    def addLast(self,value):
        new_node = Node(value)
        if self.head is None:
            self.head = new_node
            return
        else:
            head = self.head
            while(head.next):
                head = head.next

            head.next = new_node

     def merge2LinkedList(self,l1,l2):
        mergedList = LinkedList()
        head1 = l1.head
        head2 = l2.head

        while(head1 != None and head2 !=None):
            if(head1.data < head2.data):
                mergedList.addLast(head1.data)
                head1 = head1.next
            else:
                mergedList.addLast(head2.data)
                head2 = head2.next

        while(head1 != None):
            mergedList.addLast(head1.data)
            head1 = head1.next

        while (head2 != None):
            mergedList.addLast(head2.data)
            head2 = head2.next

        print(mergedList.printLinkList())


list = LinkedList()
list.addLast(2)
list.addLast(4)
list.addLast(5)
list.addLast(6)
list.addLast(90)

list2 = LinkedList()
list2.addLast(3)
list2.addLast(7)
list2.addLast(40)
list2.addLast(45)
list2.addLast(80)

list.merge2LinkedList(list,list2)
 

Вывод:

 2 3 4 5 6 7 40 45 80 90 None
 

Комментарии:

1. В вашем вопросе отсутствует реализация addLast . Скорее всего, ошибка скрыта в этом методе. Остальное выглядит нормально

2. @Paul Я забыл включить addLast при публикации, но он присутствует в моей кодовой базе, я обновил базу кода, опубликованную выше.

Ответ №1:

Вы печатаете возвращаемое значение printLinkList , которое None .

 class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def print(self):
        curr = self.head
        while curr:
            print(curr.data, end=" ")
            curr = curr.next
        print()

    def add(self, value):
        new_node = Node(value)
        if self.head is None:
            self.head = new_node
        else:
            head = self.head
            while head.next:
                head = head.next
            head.next = new_node

def merge_linked_lists(l1, l2):
    merged_list = LinkedList()
    head1 = l1.head
    head2 = l2.head

    while head1 is not None and head2 is not None:
        if head1.data < head2.data:
            merged_list.add(head1.data)
            head1 = head1.next
        else:
            merged_list.add(head2.data)
            head2 = head2.next

    while head1 is not None:
        merged_list.add(head1.data)
        head1 = head1.next

    while head2 is not None:
        merged_list.addLast(head2.data)
        head2 = head2.next

list = LinkedList()
list.add(2)
list.add(4)
list.add(5)
list.add(6)
list.add(90)

list2 = LinkedList()
list2.add(3)
list2.add(7)
list2.add(40)
list2.add(45)
list2.add(80)

merged_list = merge_linked_lists(list, list2)
merged_list.print()
 

Комментарии:

1. Спасибо за помощь ;). Код работает нормально после удаления вызова print из mergedList.printLinkList().