我正在学习链表,我正在创建双向链表。我的向后打印未按预期工作。为了获得更好的信息,我将突出显示向后打印功能。
向后打印
class Node:
def __init__(self, data=None, next=None, prev=None):
self.data = data
self.next = next
self.prev = prev
class LinkedList:
def __init__(self):
self.head = None
def get_last_node(self):
itr = self.head
while itr.next:
itr = itr.next
return itr
def print_backward(self):
if self.head is None:
print("Linked List is empty")
return
last = self.get_last_node()
itr = last
llstr = ''
while itr:
llstr += itr.data + '-->'
itr = itr.prev
print(llstr)
我希望我的代码能够得到解决...
当您修复缩进问题并确保
node.data
在打印之前转换为字符串时,您的链接列表似乎按预期工作。否则,我认为初始化列表可能有问题
class Node:
def __init__(self, data=None, next=None, prev=None):
self.data = data
self.next = next
self.prev = prev
class LinkedList:
def __init__(self):
self.head = None
def get_last_node(self):
itr = self.head
while itr.next:
itr = itr.next
return itr
def print_backward(self):
if self.head is None:
print("Linked List is empty")
return
last = self.get_last_node()
itr = last
llstr = ''
while itr:
llstr += str(itr.data) + '-->'
itr = itr.prev
print(llstr)
# Sample test
lst = LinkedList()
nodes = [Node(data=x) for x in range(10)]
nodes[0].next = nodes[1]
for i in range(1, 9):
nodes[i].prev = nodes[i - 1]
nodes[i].next = nodes[i + 1]
nodes[-1].prev = nodes[-2]
lst.head = nodes[0]
lst.print_backward()
# Output: 9-->8-->7-->6-->5-->4-->3-->2-->1-->0-->
使用双向链表,您通常需要前置和附加功能。
重写 Node 类中的 __str__ 以便于打印。
使用生成器按顺序或反向生成节点。
类似这样的:
class Node:
def __init__(self, _data):
self._data = _data
self._next = self._prev = None
def __str__(self):
return f"{self._data}"
class LinkedList:
def __init__(self):
self._head = None
self._tail = None
def append(self, _node):
_node._prev = self._tail
_node._next = None
if self._tail:
self._tail._next = _node
self._tail = _node
else:
self._head = self._tail = _node
def prepend(self, _node):
_node._next = self._head
_node._prev = None
if self._head:
self._head._prev = _node
self._head = _node
else:
self._head = self._tail = _node
def nodes(self, reverse=False):
if reverse:
temp = self._tail
while temp:
yield temp
temp = temp._prev
else:
temp = self._head
while temp:
yield temp
temp = temp._next
LL = LinkedList()
LL.append(Node(3))
LL.append(Node(4))
LL.append(Node(5))
LL.prepend(Node(2))
LL.prepend(Node(1))
print('Reversed:')
print(*LL.nodes(reverse=True), sep='-->')
print('Normal:')
print(*LL.nodes(), sep='-->')
输出:
Reversed:
5-->4-->3-->2-->1
Normal:
1-->2-->3-->4-->5