【问题标题】:Finding element from last yielding object instead of value从最后一个产生的对象而不是值中查找元素
【发布时间】:2017-09-01 17:52:02
【问题描述】:

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

在单向链表中查找包含 m 个元素的元素 结束。

按照 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>)

有谁知道我在这种情况下做错了什么?谢谢。

【问题讨论】:

标签: python algorithm list linked-list nodes


【解决方案1】:

在这种情况下你不需要 yield。

你需要的算法取决于你是否知道点赞列表的大小。

已知尺寸

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

尺寸未知

两次迭代

最简单的技巧是首先遍历整个列表,计算它包含多少元素。然后你知道大小 n 并按照上述方法获取元素。

记住m个元素

如果你“记住”了你在列表中看到的最后 m 个元素,你也可以在一次迭代中解决这个问题。然后迭代直到列表的末尾并返回你还记得的“最旧”元素。

使用两个指针

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

详情请参阅How to find nth element from the end of a singly linked list?。那篇文章中的代码是 C++,但应该不难理解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2021-04-14
    • 2015-01-11
    • 2019-07-24
    • 2021-05-08
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多