def deleteAtIndex(self, index: int) -> None: #如果 index 小于 0 或者大于等于链表的大小,则直接返回,不进行删除操作。 if index < 0 or index >= self.size: return #如果要删除的是头节点,将头节点指向下一个节点,并将下一个节点的 prev 指向空。如果链表只有一个节点,将尾节点也置空。 if index == 0: self.head = self.head.next if self.head: self.head.prev = None else: self.tail = None #如果要删除的是尾节点,将尾节点指向前一个节点,并将前一个节点的 next 指向空。如果链表只有一个节点,将头节点也置空。 elif index == self.size - 1: self.tail = self.tail.prev if self.tail: self.tail.next = None else: self.head = None #如果要删除的是中间节点,先计算当前节点是在链表的前半段还是后半段,从而选择从头节点还是尾节点开始遍历,直到找到要删除的节点。将该节点的 prev 的 next 指向该节点的 next,将该节点的 next 的 prev 指向该节点的 prev。 if index < self.size // 2: current =self.head for i in range(index): current = current.next current.prev.next = current.next current.next.prev = current.prev else: current = self.tail #从结尾开始遍历寻找index for i in range(self.size-1,index,-1): current = current.prev current.prev.next = current.next current.next.prev = current.prev self.size -= 1 AttributeError: 'NoneType' object has no attribute 'next'
时间: 2024-02-14 20:35:43 浏览: 68
算法:给定一个链表,判断链表中是否存在环
这段代码看起来像是一个双向链表的删除操作,其中包括了三种情况:删除头节点、删除尾节点和删除中间节点。如果要删除的是头节点,则将头节点指向下一个节点,并将下一个节点的 prev 指向空。如果要删除的是尾节点,则将尾节点指向前一个节点,并将前一个节点的 next 指向空。如果要删除的是中间节点,则需要先计算当前节点是在链表的前半段还是后半段,从而选择从头节点还是尾节点开始遍历,直到找到要删除的节点。然后将该节点的 prev 的 next 指向该节点的 next,将该节点的 next 的 prev 指向该节点的 prev。最后将链表的大小减1。
不过在代码执行过程中,会出现 'NoneType' object has no attribute 'next' 的错误,这是因为链表中可能出现空节点(即 None),而 None 对象没有 next 属性,需要在代码中添加判断和处理。
阅读全文