我必须为我的作业做以下事情:
假设您的链接列表不为空,并且由变量头指向。编写一个名为findMin()的方法,该方法遍历列表并找到最小值(您可以像数字一样比较字符串)并返回该值。
假设您的链接列表不为空,并且由变量头指向。编写一个名为getLast()的方法,该方法遍历列表并返回列表中的最后一项。这是链表链中最后一个节点的值。
完成追加方法。它运行到最后并将新节点附加到链中的最后一个现有节点。如果链中还没有节点,则将self.head设置为该节点。谨防!这很棘手!您可以查阅您的教科书。
我试图解决第一个,我只是迷路了,我不知道我是在弄乱班级结构还是什么(我刚刚学习了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
答案 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? p>
好像你的意思
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
成为列表单元格。它有两个字段value
和next
(在函数式语言中也称为car/cdr
或head/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
现在让我们定义两个基本功能:map
和reduce
。 map
按顺序将函数应用于每个节点并返回结果列表:
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)
等
如果您有任何疑问,请告诉我们。