class Node:
def __init__(self, item, next):
self.item = item
self.next = next
class LinkedList:
def __init__(self):
self.head = None
def add(self, item):
self.head = Node(item, self.head)
def is_empty(self):
return self.head == None
我试过这样做,但它没有用。
from LinkedList import Node, LinkedList
def insert_at_end(linked_list, item):
linked_list.add(item)
有人可以帮忙吗?
答案 0 :(得分:2)
您需要遍历链接列表并在最后添加新节点:
def insert_at_end(linked_list, item):
if linked_list.is_empty():
linked_list.add(item)
else:
node = linked_list.head
while node.next is not None:
node = node.next
node.next = Node(item, None)
如果链表为空,则重新使用现有方法在一开始添加节点。
演示:
>>> def print_ll(ll): # something to print the list
... node = ll.head
... while node is not None:
... print node.item,
... node = node.next
...
>>> linked_list = LinkedList()
>>> insert_at_end(linked_list, 10)
>>> insert_at_end(linked_list, 42)
>>> insert_at_end(linked_list, 'foo')
>>> print_ll(linked_list)
10 42 foo
答案 1 :(得分:0)
一个选项是将__iter__()
魔术方法添加到您的LinkedList中以使其可迭代:
def __iter__(self):
current = self.head
while current is not None:
yield current
current = current.next
else:
raise StopIteration
现在你可以迭代遍历节点添加到尾部:
def add_tail(self, item):
if self.is_empty():
self.add(item)
return
# Loop to the end of the list and add the item at the end.
for node in self:
pass
else:
node.next = Node(item, node.next)
添加__iter__()
魔术方法还有一个好处,就是可以使用迭代来构建链表的字符串表示。通过定义__str__()
魔术方法,您可以使用print(my_list)
打印类似2->3->5
的内容,如果您有__iter__()
,则可以很容易地使用列表解析方法定义。
请注意,这实际上与the answer given by @MartijnPieters相同,只是它的形式不同。你仍然在列表中循环,直到你到达最后并在最后添加项目。