Как создать связанный список с помощью python в этом классе

#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