-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathremove_dups.py
executable file
·70 lines (60 loc) · 1.42 KB
/
remove_dups.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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/python
"""
Remove duplicates from an unsorted linked list.
"""
from linked_list import randlinkedlist
def solution1(head):
'''
Time complexity: O(n)
Space complexity: O(n)
'''
counter = dict()
back, cur = None, head
while cur:
if not counter.get(cur.value):
counter[cur.value] = 1
if back:
back.next = cur
back = cur
cur = cur.next
back.next = None
def solution2(head):
'''
Time complexity: O(n^2)
Space complexity: O(1)
'''
cur = head
while cur:
runner = cur
while runner.next:
if runner.next.value == cur.value:
runner.next = runner.next.next
else:
runner = runner.next
cur = cur.next
def solution3(head):
'''
Same as solution2.
'''
cur = head
while cur:
prev, runner = cur, cur.next
while runner:
if runner.value != cur.value:
prev.next = runner
prev = runner
runner = runner.next
prev.next = None
cur = cur.next
if __name__ == "__main__":
def _print(head):
cur = head
while cur:
print cur.value
cur = cur.next
ll = randlinkedlist(max=10)
print "Original linked list: "
_print(ll.head)
solution(ll.head)
print "Cleaned up linked list: "
_print(ll.head)