从最后一个屈服对象而不是值中查找元素

2024-05-16 02:38:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我在课堂上遇到了一个复杂的问题,问题是:

Find the element in a singly linked list that's m elements from the end.

根据一些关于StackOverflow的指南和阅读问题,我能够得出以下代码:

# Provided Node Class.
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

# Singly Linked List
class SinglyLinkedList:

    # Initiate current object as start of list.
    def __init__(self):
        self.head = None

    # Add new node to list at currect position.
    def add(self, new_data):
        node = Node(new_data)
        node.next = self.head
        self.head = node

    # Set head as starting point and walk through list.
    def Question5(self, index):
        walk = self.head
        while walk is not None:
            yield walk.data
            walk = walk.next

sll = SinglyLinkedList()
sll.add(1);
sll.add(4);
sll.add(3);
sll.add(8);
sll.add(1);
print ("Value at 4 is :", sll.Question5(4))
# ('Value at 4 is :', 1)
sll.add(0);
sll.add(0);
sll.add(0);
sll.add(0);
sll.add(0);
print ("Value at 0 is :", sll.Question5(0))
# ('Value at 0 is :', 0)
sll.add(22345643);
sll.add(12345643);
sll.add(14375643);
sll.add(12345633);
sll.add(12345647);
print ("Value at 12345643 is :", sll.Question5(12345643))
# ('Value at 12345643 is :', None)

但是,我的输出不是我所期望的,而是我的代码在运行时显示以下内容:

('Value at 4 is :', <generator object Question5 at 0x7f9635bb3870>)
('Value at 0 is :', <generator object Question5 at 0x7f9635bb3870>)
('Value at 12345643 is :', <generator object Question5 at 0x7f9635bb3870>)

有人知道我在这种情况下做错了什么吗?多谢各位


Tags: selfnoneaddnodedataobjectisvalue
1条回答
网友
1楼 · 发布于 2024-05-16 02:38:41

在这种情况下,你不需要收益

您需要的算法取决于您是否知道喜欢的列表的大小

已知大小

给定列表的大小n:只需返回列表的第n-m个元素

大小不详

两次迭代

最简单的技巧是首先遍历整个列表,计算它包含多少元素。然后您知道大小n,并获得如上所述的元素

记住m个元素

如果“记住”列表中最后的m个元素,也可以在一次迭代中解决这个问题。然后迭代到列表末尾,返回您仍然记得的“最早”元素

使用两个指针

最后一种方法使用指向列表中两个元素的两个指针,这两个元素的距离始终为m个元素。它们同时移动。如果第一个指针到达列表的末尾,则第二个指针正好指向列表末尾的元素m

详情见How to find nth element from the end of a singly linked list?。该帖子中的代码是C++,但不应该太难理解。

相关问题 更多 >