Skip to content

Commit 7f1881b

Browse files
remove duplicate nodes, singly linked list
1 parent ee1d3fc commit 7f1881b

File tree

1 file changed

+111
-0
lines changed
  • Python/chapter02/2.1 - Remove Dups

1 file changed

+111
-0
lines changed
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
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()

0 commit comments

Comments
 (0)