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