【发布时间】:2018-04-18 19:29:37
【问题描述】:
来自破解编码面试。任务 2.3。
你有一个链表,你需要创建一个函数,只接受该列表中的节点并将其从该列表中删除。
当节点在中间时,很简单。您只需将字段 value 和 next 重新分配给列表中的下一个节点。但是如何去掉列表中的最后一个节点呢?
我一直在寻找一种在 Python 中修改内存的方法,但找不到任何真正有效的方法。有人可以提出任何建议吗?
代码如下:
class LinkedListNode:
def __init__(self, item, next = None):
self.item = item
self.next = next
class LinkedList:
def __init__(self):
self.__head = None
def append(self, item):
self.__head = LinkedListNode(item, self.__head)
@property
def head(self):
return self.__head
def remove_node(node):
if node.next:
next = node.next
node.item = next.item
node.next = next.next
next.next = None
else:
# WHAT TO DO HERE?
pass
【问题讨论】:
-
如果 node.next.next 是 None 那么 node.next = None,不是那么简单吗?
-
你确定你应该为你的链表类写一个函数,而不是一个方法吗?你确定你的链表应该是单链的吗?
-
node.next 已经是 None,因为它是列表中的最后一个节点。是的,函数,因为你只有一个节点,而不是整个列表,这是我的问题。想象一种情况,您只收到列表的最后一个节点。在 C++ 中,您通过内存地址修改值。如何在 Python 中做同样的事情?
-
remove_node没有删除节点;它正在删除给定节点 after 的节点。如果没有这样的节点,则无事可做;你可以回来。 -
你也不能在 C++ 中做到这一点。
标签: python python-3.x memory-management