#python #python-3.x #linked-list
#python #python-3.x #связанный список
Вопрос:
Я вижу определение класса связанного списка в Leetcode:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = None
Я не понимаю, как его использовать, есть два метода, которые я хочу выяснить:
Во-первых: если я хочу создать связанный список 1-> 3-> 5 шаг за шагом, как? Моя идея заключается в том, что:
p1 = ListNode(1)
p2 = ListNode(3)
p3 = ListNode(5)
p2 = p1.next
p3 = p1.next.next
print(p1.val) #however it shows p1 doesn't have next attr...
Во-вторых, если у меня есть связанный список, например:
l1 = ListNode([1, 2, 4, 6])
Как получить каждое значение шаг за шагом?
Я пытался, как:
print(l3.next)
print(l3.next.next)#maybe just some false idea...
Ответ №1:
Конструктор неверен: он устанавливает self.next
None
значение, а не значение next
. Давайте исправим это:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
Теперь мы можем создать список из трех узлов. Поскольку это односвязный прямой список, нам нужно начать с конца:
p3 = ListNode(3)
p2 = ListNode(2, p3)
p1 = ListNode(1, p2)
print(p1.next.next.val) # 3
Или для создания связанного списка из списка:
def from_list(lst) -> ListNode:
node = None
for item in lst[::-1]:
node = ListNode(item, node)
return node
x = from_list([1, 2, 3, 4])
print(x.next.next.next.val) # 4