while fast and fast.next_node: fast = fast.next_node.next_node slow = slow.next_node pos += 1 ll2 = SinglyLinkedList() ll2.head.next_node = slow ll2.reverse_all2() origin_head = ll.head.next_node reverse_head = ll2.head.next_node is_pal = True while origin_head and reverse_head: if origin_head.data == reverse_head.data: origin_head = origin_head.next_node reverse_head = reverse_head.next_node else: is_pal = False break return is_pal if __name__ == '__main__': # the result should be False, True, True, True, True test_str_arr = ['abcdabc', 'aa', 'aba', 'abba', 'abcba'] for str in test_str_arr: ll = SinglyLinkedList() for s in str: ll.insert_to_head(s) print(is_palindrome(ll))