@@ -20,7 +20,7 @@ def is_dll_palindrome(head):
20
20
while runner .next is not None :
21
21
runner = runner .next
22
22
list_length += 1
23
- while number_checked < int (list_length / 2 + 1 )
23
+ while number_checked < int (list_length / 2 + 1 ):
24
24
if current .value != runner .value :
25
25
return False
26
26
else :
@@ -33,6 +33,69 @@ def is_dll_palindrome(head):
33
33
# If it's a singly-linked list, then we go through it once and get the length.
34
34
# We may as well get all the values and put it in an array and compare?
35
35
36
+ def reverse_and_clone (node ):
37
+ prev = None
38
+ while node is not None :
39
+ current = LinkedListNode (node .value )
40
+ current .next = prev
41
+ prev = current
42
+ node = node .next
43
+ return prev
44
+
45
+
46
+ def is_equal_ll (head1 , head2 ):
47
+ node1 = head1
48
+ node2 = head2
49
+ while node1 is not None and node2 is not None :
50
+ if node1 .value != node2 .value :
51
+ print (node1 .value , node2 .value )
52
+ return False
53
+ node1 = node1 .next
54
+ node2 = node2 .next
55
+ return True
56
+
57
+
58
+ def is_sll_palindrome_reverse (head ):
59
+ reverse = reverse_and_clone (head )
60
+ return is_equal_ll (head , reverse )
61
+
62
+ class Stack (object ):
63
+ def __init__ (self , value ):
64
+ super (Stack , self ).__init__ ()
65
+ self .top = None
66
+
67
+ def pop (self ):
68
+ """Removes and returns the top item"""
69
+ removed = self .top
70
+ self .top = self .top .next
71
+ return removed
72
+
73
+ def push (self , item ):
74
+ """Adds an item to the stack."""
75
+ second = self .top
76
+ self .top = LinkedListNode (item )
77
+ self .top .next = second
78
+
79
+
80
+ def is_sll_palindrome_runners (head ):
81
+ slow = head
82
+ fast = head
83
+ faster = head
84
+ if __name__ == '__main__' :
85
+ while faster is not None :
86
+ fast = faster
87
+ # TODO: Slow runner adds node values to a stack
88
+ slow_stack .add (slow )
89
+ # Shift nodes
90
+ slow = slow .next
91
+ faster = fast .next .next
92
+ # If odd number of nodes
93
+ if fast .next = None :
94
+ # TODO: Drop first node from stack
95
+ is_equal_ll (stacknode1 , slow )
96
+
97
+
98
+
36
99
class Tests (unittest .TestCase ):
37
100
38
101
def test_sll_palindrome (self ):
@@ -50,9 +113,12 @@ def test_sll_palindrome(self):
50
113
d .next = e
51
114
e .next = f
52
115
f .next = g
53
- # Sum:
54
- h = sum_lists (a , d )
55
- print (h .value , h .next .value , h .next .next .value , h .next .next .next .value )
116
+ self .assertEqual (is_sll_palindrome_reverse (a ), True )
56
117
57
118
if __name__ == '__main__' :
58
- unittest .main ()
119
+ unittest .main ()
120
+
121
+ """
122
+ Mistakes:
123
+ - Initially wrote 'node1 != node2' instead of `node1.value != node2.value'.
124
+ """
0 commit comments