你必须从头部开始爬回tail。
尾部是第一个没有next的节点:next is None。
跟踪倒数第二个(prev),将其next设置为None。在
def deleteAtTail(self): # remove_last would likely be a better name
""" removes the last element of the singly linked list
"""
temp = self.head
while(temp.next is not None):
prev = temp
temp = temp.next
prev.next = None
你必须从头部开始爬回
tail
。 尾部是第一个没有next的节点:next is None
。 跟踪倒数第二个(prev
),将其next
设置为None
。在将
prev.next
设置为None
将删除尾节点(如果没有其他对它的引用,它将被垃圾回收)因为这是一个单链链表,所以必须在tail之前遍历该列表以到达节点。我想你的职能应该是
我们设置
self.tail = temp
,因为temp等于列表末尾之前的节点。所以我们删除temp(通过删除它的最后一个引用),然后将tail设置为我们先前标识为列表中倒数第二个节点的节点,因为它实际上是列表的新结尾。在编辑:
以解决一些对此答案的评论所关注的问题。在处理单链或双链表时,最好保持}指针。知道tail的位置对于在列表中插入计算上合理的内容是非常有价值的。在
head
、tail
和{这意味着您的插入方法可以从以下位置开始:
^{pr2}$时间复杂度为O(n):
它具有O(1)的更有利的时间复杂度。在
不能在O(n)=c复杂度的单链表中执行删除操作,因为您没有对前一个列表节点的引用。您必须遍历到列表的末尾,记住当前节点和上一个节点,然后将上一个节点从引用中修剪到下一个节点,下一个节点是您要删除的最后一个节点。对于单链表,这将始终具有O(n)=n的复杂性。在
相关问题 更多 >
编程相关推荐