class Node:
def __init__(self, node_data):
self.data = node_data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
self.tail = None
def insert_node(self, node_data):
node = Node(node_data)
if not self.head:
self.head = node
else:
self.tail.next = node
self.tail = node
# Complete the printLinkedList function below.
def printList(self):
while self.head is not None:
print(self.head.data)
self.head = self.head.next
l = LinkedList()
l.insert_node(5)
l.insert_node(10)
l.insert_node(19)
l.printList()
我正在尝试使用迭代方法来实现链表。我有2个指针(头,尾)。所以无论如何要避免使用2个指针而不递归。对于printList函数,仅使用头指针是一种好习惯。任何反馈表示赞赏
答案 0 :(得分:1)
在您当前的链表实现中,self.tail
除了结束最后插入之外,实际上并没有其他目的。您可以像在printList()
方法中那样,通过从头指针迭代所有“链表”操作来删除它。请记住,尽管这样做确实避免了递归,但这必然会强制所有操作为O(n);不过,这还不错,因为这是简单化的链表的典型代表。
使用尾指针和节点引用先前节点的目的是为了使您也可以支持反向遍历。这是一个简单的优化,但是改进仅变为O(n / 2):对于短列表来说已经足够好了,但是对于较大的列表却没有意义。再次,这是在矢量化,有序和树状数据结构上使用这种结构的学习重点。
答案 1 :(得分:0)
def getList(self):
data = []
currentNode = self.head
while currentNode is not None:
data.append( currentNode.data )
currentNode = currentNode.next
return data