Как повторно создать узел связанного списка сразу после его удаления в python

#python #linked-list

#python #связанный список

Вопрос:

Я хочу удалить узел в связанном списке и немедленно преобразовать его в Python, но я не знаю, как этого добиться, вот пример кода:

 # Definition for singly-linked list.
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

# delete node
def delete_node_after(pre_node):
    deleted_node = pre_node.next
    pre_node.next = pre_node.next.next
    del deleted_node        # incorrect, it is only delete `deleted_node` reference to l2

def test():
    l1 = ListNode(1)
    l2 = ListNode(2)
    l3 = ListNode(3)

    l1.next = l2
    l2.next = l3

    delete_node_after(l2)

    print(l1.next.val)
    print(l2.val)           # l2 is still here
  

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

Или я могу только дождаться, пока Python автоматически переработает его по количеству ссылок через некоторое время?

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

1. Объекты Python будут собраны как мусор, если на них больше нет ссылок. del удаляет только одну ссылку, а не объект. Вы могли бы задать другие ссылающиеся имена в None .

2. Это то, что вы ищете? blender.stackexchange.com/questions/75344 /…

3. да, я знаю, del это не ответ, поэтому я хочу спросить @KlausD.

4. @Recessive Это решение применимо только к используемой там библиотеке blender.

5. обычно вы удостоверяетесь, что единственной ссылкой на этот узел является элемент перед .next