-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy path2.3-Delete_Middle_Node.py
43 lines (33 loc) · 1.11 KB
/
2.3-Delete_Middle_Node.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# CTCI 2.3
# Remove Delete Middle Node
import unittest
#from LinkedList import LinkedList
# My Solution
# My approach was to simply shift over every element
# A slightly better approach would be to just delete the next node after shifting it over once
def delete_middle(curr):
if curr is not None and curr.next is not None:
curr.data = curr.next.data
delete_middle(curr.next)
else:
curr = None
#-------------------------------------------------------------------------------
# CTCI Solution
# Should have null checks?
def delete_middle_node(node):
node.value = node.next.value
node.next = node.next.next
#-------------------------------------------------------------------------------
#Testing
class Node():
def __init__(self, data, next=None):
self.data, self.next = data, next
class Test(unittest.TestCase):
def test_delete_middle(self):
head = Node(1,Node(2,Node(3,Node(4))))
delete_middle(head.next.next)
self.assertEqual(head.data, 1)
self.assertEqual(head.next.data, 2)
self.assertEqual(head.next.next.data, 4)
if __name__ == "__main__":
unittest.main()