我刚开始学习链表,我的任务要求我生成一个返回最低奇数的函数。。。我想我已经在CCD_ 1函数中做到了。我相信我的代码只是检查链表的第一个和第二个元素,所以我的问题是如何在链表中迭代以找到最低的奇数?我会想一个for循环,但我不明白我在迭代什么列表。。。这就引出了另一个问题,如果不是在列表、数组、字符串等中,链表中的元素存储在哪里。?
class LinkedList:
def __init__(self):
self.head = None
#def.....
def add_all(self, a_list):
newNode = Node(a_list)
newNode.next = self.head
self.head = newNode
for i in a_list:
self.next = i
def add_all(self, a_list):
for i in range(len(a_list)):
self.add(a_list[i])
def get_min_odd(self):
lst = []
if self.head.data % 2 == 1:
lst.append(self.head.data)
elif self.head.next.data % 2 == 1:
lst.append(self.head.next.data)
else:
return 999
return min(lst)
my_list = LinkedList()
my_list.add_all([1, 4, -3, 6, 9, 2, 10001, 25, 19, 20])
print(my_list.get_min_odd())
几个问题:
-
您有两个称为
add_all
的方法。这意味着第一个将丢失。实际上,您需要一个add
方法,而不是第一个add_all
方法。它不应该以列表作为值,而应该只使用单个数值。该方法不应该循环(此外,一次又一次地将i
分配给同一个next
属性毫无意义(。 -
CCD_ 7确实在第一和第二节点上固定得太多。当列表很短或为空时,它们甚至可能不存在。要在链表上循环,您需要一个名称,该名称首先等于头节点,然后沿着
next
属性遍历到下一个节点,然后遍历下一个。。。直到它到达终点。 -
get_min_odd
不应创建包含值的列表。这违背了链接列表的目的。相反,当遍历链表时,该代码应该立即更新的最小值。
以下是需要更正的两种方法的更新代码:
def add(self, value): # name and arg name correction
newNode = Node(value)
newNode.next = self.head
self.head = newNode
和:
def get_min_odd(self):
result = None
node = self.head
while node: # as long as the end of the list is not encountered...
if node.data % 2 == 1:
# adjust the result to the minimum data encountered so far
result = node.data if result is None else min(result, node.data)
node = node.next # traverse to next node
return result