#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