I’m working on implementing the ‘Pointers at different speeds’ exercise.
Linked Lists | Codecademy
from LinkedList import LinkedList
# Complete this function:
def find_middle(linked_list):
fast_node = linked_list.get_head_node()
slow_node = linked_list.get_head_node()
count = 1
while fast_node:
fast_node = fast_node.get_next_node()
count += 1
if fast_node.get_next_node():
fast_node = fast_node.get_next_node
slow_node = slow_node.get_next_node
count += 1
else:
if count % 2 == 0:
return slow_node.get_next_node().get_value()
return slow_node.get_value()
def generate_test_linked_list(length):
linked_list = LinkedList()
for i in range(length, 0, -1):
linked_list.insert_beginning(i)
return linked_list
# Use this to test your code:
test_list = generate_test_linked_list(7)
print(test_list.stringify_list())
middle_node = find_middle(test_list)
print(middle_node.value)
Line 11 keeps giving me the error
File "find_middle.py", line 11, in find_middle
if fast_node.get_next_node():
AttributeError: 'NoneType' object has no attribute 'get_next_node'
What am I doing wrong?
This error message suggests that you are trying to call the method get_next_node()
on an object that is None
. In this case, it seems that fast_node
is None
and therefore does not have a get_next_node()
method.
To fix this error, you can check if fast_node
is None
before calling its method. Here’s an example:
def find_middle(head):
slow_node = head
fast_node = head
while fast_node and fast_node.get_next_node():
slow_node = slow_node.get_next_node()
fast_node = fast_node.get_next_node().get_next_node()
return slow_node
In this version of the code, the while
loop condition checks that fast_node
is not None
and that fast_node.get_next_node()
is not None
before entering the loop. This should prevent the AttributeError
that you were seeing.
hope that helps! 
1 Like