File tree Expand file tree Collapse file tree 1 file changed +111
-0
lines changed
Python/chapter02/2.1 - Remove Dups Expand file tree Collapse file tree 1 file changed +111
-0
lines changed Original file line number Diff line number Diff line change
1
+ #!/usr/bin/python3
2
+ import unittest
3
+
4
+
5
+ class Node :
6
+ def __init__ (self , data , next = None ):
7
+ self .data = data
8
+ self .next = next
9
+
10
+ def __str__ (self ):
11
+ return str (self .data )
12
+
13
+
14
+ class SinglyLinkedList :
15
+
16
+ def __init__ (self ):
17
+ self .head = None
18
+ self .size = 0
19
+
20
+ def insertHead (self , data ):
21
+ print ('Inserting head!----->' , data )
22
+ n = Node (data )
23
+ temp = self .head
24
+ self .head = n
25
+ self .head .next = temp
26
+
27
+ def addNode (self , data ):
28
+ if not self .head :
29
+ n = Node (data )
30
+ self .head = n
31
+ else :
32
+ n = self .head
33
+ while (n .next ):
34
+ n = n .next
35
+
36
+ print ('New Node added ---->' , data )
37
+ new_node = Node (data )
38
+ n .next = new_node
39
+
40
+ def removeDuplicates (self ):
41
+ print ('Removing Duplicates.' )
42
+ temp = self .head
43
+ nums = set ()
44
+ while temp .next :
45
+ nums .add (temp .data )
46
+ if temp .next .data in nums :
47
+ temp .next = temp .next .next
48
+ temp = temp .next
49
+ print ('Duplicates Removed!---------' )
50
+
51
+ def removeDuplicatesNoBuffer (self ):
52
+ print ('Removing Duplicates - No buffer' )
53
+ temp = self .head
54
+ while temp .next :
55
+ second = temp
56
+ while second .next :
57
+ if second .data == second .next .data :
58
+ second .next = second .next .next
59
+ second = second .next
60
+ temp = temp .next
61
+ print ('Duplicates Removed!----------' )
62
+
63
+ def printList (self ):
64
+ n = self .head
65
+
66
+ print ('Printing Singly Linked List' )
67
+ while (n ):
68
+ print (n )
69
+ n = n .next
70
+
71
+
72
+ class Test (unittest .TestCase ):
73
+ @classmethod
74
+ def setUpClass (cls ):
75
+ cls .link = SinglyLinkedList ()
76
+ cls .link .addNode (- 1 )
77
+ cls .link .addNode (- 1 )
78
+ cls .link .addNode (4 )
79
+ cls .link .addNode (3 )
80
+ cls .link .addNode (4 )
81
+ cls .link .addNode (1 )
82
+ cls .link .addNode (20 )
83
+ cls .link .addNode (4 )
84
+ cls .link .addNode (4 )
85
+
86
+ @classmethod
87
+ def tearDownClass (cls ):
88
+ print ('---Teardown successful---' )
89
+
90
+ def test1 (self ):
91
+ self .link .printList ()
92
+
93
+ def test2 (self ):
94
+ self .link .removeDuplicates ()
95
+ self .link .printList ()
96
+
97
+ def test3 (self ):
98
+ self .link .addNode (- 1 )
99
+ self .link .addNode (20 )
100
+ self .link .addNode (40 )
101
+ self .link .printList ()
102
+ self .link .removeDuplicatesNoBuffer ()
103
+ self .link .printList ()
104
+
105
+ def test4 (self ):
106
+ self .link .insertHead (- 2 )
107
+ self .link .printList ()
108
+
109
+
110
+ if __name__ == "__main__" :
111
+ unittest .main ()
You can’t perform that action at this time.
0 commit comments