链接列表Python中的家庭作业

时间:2014-09-30 05:21:30

标签: python linked-list

我必须为我的作业做以下事情:

  1. 假设您的链接列表不为空,并且由变量头指向。编写一个名为findMin()的方法,该方法遍历列表并找到最小值(您可以像数字一样比较字符串)并返回该值。

  2. 假设您的链接列表不为空,并且由变量头指向。编写一个名为getLast()的方法,该方法遍历列表并返回列表中的最后一项。这是链表链中最后一个节点的值。

  3. 完成追加方法。它运行到最后并将新节点附加到链中的最后一个现有节点。如果链中还没有节点,则将self.head设置为该节点。谨防!这很棘手!您可以查阅您的教科书。

  4. 我试图解决第一个,我只是迷路了,我不知道我是在弄乱班级结构还是什么(我刚刚学习了3天前的课程)

    这是我的尝试......

     class LinkedList:
    class Node:
        def __init__(self,value):
            self.value = value
            self.next  = none
    def __init__(self):
        self.head = None
    def findMin(self):
        currentNode = self.head
        minNode = self.head
        while currentNode != none:
            if currentNode.next < currentNode:
                minNode = currentNode
                currentNode = currentNode.next
        return minNode
    

2 个答案:

答案 0 :(得分:1)

正如@mgilson在评论中提到的那样,有很多错误,并没有列出所有错误。

我认为你会从写作(在评论中,为什么不在)你认为每一行正在做的事情中受益匪浅。

让我们从

开始
 currentNode = self.head

我认为这是试图通过将currentNode设置为指向&#34;来启动列表的开头。

如上所述,这似乎是访问当前节点的成员变量,名为&#39; head&#39;。但Node类定义没有一个名为head的已定义成员!而且......你为什么要那样做?你被告知&#34;当前节点头部&#34;!

所以你可能意味着

currentNode = self  # start at the head of the list

下一步:

minNode = self.head

这就是说&#34;具有当前已知最小值的节点存储在这个节点中#34;

和以前一样,你可能意味着:

minNode = self # The head currently has the minimum we know about

然后:

while currentNode != none:

首先,如果你使用语法高亮编辑器,它会马上告诉你&#39;无&#39;有一个资本&#39; N&#39;

这里没有其他问题。

然后:

    if currentNode.next < currentNode:
        minNode = currentNode
        currentNode = currentNode.next

这是试图说&#34;如果下一个节点的值小于这个值,那么现在最小值是......&#34; ......其实是什么?它说它是现在的!但事实并非如此:如果这个if语句为真,那么 next 包含最小值!并且坚持下去,我们不应该与minNode进行比较,而不是currentNode?

好像你的意思

    if currentNode.value < minNode.value:
        minNode = currentNode    # this node is now the smallest we know about

并且下一行需要在if循环之外,因为它将我们移动到下一个节点:

    currentNode = currentNode.next  # move on to the next node
P,几乎在那里:现在我们必须返回最小的,而不是具有最小值的节点(仔细阅读说明。

 return minNode.value

HTH

答案 1 :(得分:0)

好的,让我们做这个功课!

Node成为列表单元格。它有两个字段valuenext(在函数式语言中也称为car/cdrhead/tail)。

class Node:
    def __init__(self, value):
        self.value = value
        self.next = None

append(node, other)可以定义如下:如果node没有“下一个”节点(即它是最后一个),请将other权限附加到此node。否则,取“下一个”节点,并将(递归)other追加到那个节点:

    def append(self, other):
        if self.next:
            self.next.append(other)
        else:
            self.next = other

现在让我们定义两个基本功能:mapreducemap按顺序将函数应用于每个节点并返回结果列表:

    def map(self, fn):
        r = [fn(self.value)]
        if self.next:
            r += self.next.map(fn)
        return r

reduce将函数应用于每个节点,并将结果合并为单个值:

    def reduce(self, fn, r=None):
        if r is None:
            r = self.value 
        else:
            r = fn(r, self.value)
        if self.next:
            return self.next.reduce(fn, r)
        return r

现在你准备好做作业了。

创建一个列表:

lst = Node(1)
lst.append(Node(8))
lst.append(Node(3))
lst.append(Node(7))

打印所有值:

print lst.map(lambda x: x)

找到最后一个值:

print lst.reduce(lambda r, x: x)

找到最大值:

print lst.reduce(max)

如果您有任何疑问,请告诉我们。