由于双链表有两个虚拟节点,一个是头部,另一个是尾部。我可以通过self跳过伪尾节点__current==None:raise StopIteration
,但我不知道如何传递虚拟头节点并继续遍历以下节点。
class LinkedListDLL:
def __init__(self):
self.__head = NodeDLL(None)
self.__head.set_next(self.__head)
self.__head.set_prev(self.__head)
self.__count = 0
def size(self):
return self.__count;
def is_empty(self):
return self.__count == 0
def add_before(self, item, curr):
new_node = NodeDLL(item)
new_node.set_next(curr)
new_node.set_prev(curr.get_prev())
curr.set_prev(new_node)
new_node.get_prev().set_next(new_node)
self.__count += 1
def add_to_head(self, item):
self.add_before(item, self.__head.get_next())
def add_to_tail(self, item):
self.add_before(item, self.__head)
def remove_from_head(self):
self.remove(self.__head.get_next())
def remove_from_tail(self):
self.remove(self.__head.get_prev())
def remove(self, curr):
curr.get_prev().set_next(curr.get_next())
curr.get_next().set_prev(curr.get_prev())
self.__count -= 1
def __iter__(self):
return LinkedListIterator(self.__head)
class LinkedListIterator:
def __init__(self, head):
self.__current = head
def __next__(self):
if self.__current == None :
raise StopIteration
else:
item = self.__current.set_data.get_next()
self.__current = self.__current.get_next()
return item
您应该重构代码,记住nodedell(None)
可能与None
不同。完成后:
def __next__(self):
if not self.__current.get_next():
raise StopIteration
#Skips first value in list, i.e. head
self.__current = self.__current.get_next()
return self.__current
我有一个双链接列表,看起来像: 当我使用迭代器和下面的代码遍历列表时,输出会精确打印上面写的内容。 但是,我希望在遍历列表时跳过空节点,以便它只打印: 我无法让我的代码做到这一点。这是我迄今为止所想出的。 问题是我得到了一个NoTouchElementException错误,但我不知道如何修复它。我猜是因为当我到达第二个空虚拟节点时,我试图跳过它,但没有其他节点可以跳到。 我的问题是,如何更改代码
我目前正在学习数据结构考试,遇到了一个关于迭代的问题。 在单链表上实现双向迭代器是可能的吗?如果是的话,如何实施呢? 我有一个想法,首先向前遍历链表,并存储一个临时链表,该临时链表保存反向的节点。但是遍历这个临时列表将导致一个只允许向后遍历的迭代器。
我写了下面的代码,但它在执行create()函数后停止工作。我想从头节点开始删除替代元素。我的delete_Alt()函数正确吗?请告诉我哪里错了。
问题内容: 如何以相反的顺序遍历链接哈希表?地图中是否有预定义的方法可以做到这一点? 我创建它如下: 问题答案: List > list = new ArrayList<>(map.entrySet()); 确实不是很漂亮,但是要花费一个条目集的副本,如果您的地图上有很多条目,则可能会出现问题。 出色的Guava库具有一个,可让您将Java 5用于每个样式循环而不是索引循环:
每次我们在堆中为链表分配内存时,我们都会得到一个地址,这个地址链接到链表的下一个变量,head是指向链表初始节点的指针。 如果我们做,那么它会指向下一个链表,或者指向堆的随机内存,或者指向堆中初学者列表的下一个内存。
我真的很难修复我的代码。我已经创建了一个双链接列表,我正试图反向遍历它。 有什么想法吗? 这是我的代码:Node。爪哇: 下面是第二个类“DNode.java”: 最后,这里是双链接列表。java:(重写另一个类“链表”中的“添加”和“删除”方法) 公共类双链接列表扩展了链接列表{ 我可以向前打印列表,但向后打印时会遇到无限循环。有什么想法吗? 谢谢