Skip to content

Commit 25538c3

Browse files
author
Partho Biswas
committed
no message
1 parent a66d6f7 commit 25538c3

File tree

3 files changed

+42
-43
lines changed

3 files changed

+42
-43
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,93 +1,102 @@
1-
# This is an input class. Do not edit.
2-
class Node:
3-
def __init__(self, value):
4-
self.value = value
5-
self.prev = None
6-
self.next = None
7-
8-
9-
# Code is OK but test cases are failing. DOn't know why
101
class DoublyLinkedList:
112
def __init__(self):
123
self.head = None
134
self.tail = None
145

6+
# O(1) time | O(1) space
157
def setHead(self, node):
168
if self.head is None:
179
self.head = node
1810
self.tail = node
1911
return
20-
self.insertBefore(self.head, node)
12+
self.insertBefore(self.head, node) # corner case -- setting new head
2113

14+
# O(1) time | O(1) space
2215
def setTail(self, node):
2316
if self.tail is None:
2417
self.setHead(node)
2518
return
2619
self.insertAfter(self.tail, node)
2720

21+
# O(1) time | O(1) space
2822
def insertBefore(self, node, nodeToInsert):
23+
# edge case
2924
if nodeToInsert == self.head and nodeToInsert == self.tail:
3025
return
31-
self.remove(nodeToInsert)
26+
self.remove(nodeToInsert) # if the node exists in the linked list we will remove it. This step can be skipped
3227
nodeToInsert.prev = node.prev
3328
nodeToInsert.next = node
34-
if not node.prev:
29+
if node.prev is None:
3530
self.head = nodeToInsert
3631
else:
3732
node.prev.next = nodeToInsert
3833
node.prev = nodeToInsert
3934

35+
# O(1) time | O(1) space
4036
def insertAfter(self, node, nodeToInsert):
4137
if nodeToInsert == self.head and nodeToInsert == self.tail:
4238
return
43-
self.remove(nodeToInsert)
39+
self.remove(nodeToInsert) # if the node exists in the linked list we will remove it. This step can be skipped
4440
nodeToInsert.prev = node
4541
nodeToInsert.next = node.next
46-
if not node.next:
42+
if node.next == None:
4743
self.tail = nodeToInsert
4844
else:
4945
node.next.prev = nodeToInsert
5046
node.next = nodeToInsert
5147

48+
# O(Position) time | O(1) space
5249
def insertAtPosition(self, position, nodeToInsert):
5350
if position == 1:
5451
self.setHead(nodeToInsert)
5552
return
5653
node = self.head
57-
currPos = 1
58-
while node and currPos != position:
54+
currentPosition = 1
55+
while node is not None and currentPosition != position:
5956
node = node.next
60-
currPos += 1
61-
if node:
62-
self.insertBefore(nodeToInsert)
57+
currentPosition += 1
58+
if node is not None:
59+
self.insertBefore(node, nodeToInsert)
6360
else:
6461
self.setTail(nodeToInsert)
6562

63+
# O(n) time | O(1) space
6664
def removeNodesWithValue(self, value):
6765
node = self.head
68-
while node:
66+
while node is not None:
67+
# we need this temp variable because we are losing node.next in removeNodeBindinnodegs()
6968
nodeToRemove = node
7069
node = node.next
7170
if nodeToRemove.value == value:
7271
self.remove(nodeToRemove)
7372

73+
# O(1) time | O(1) space
7474
def remove(self, node):
75-
if node == self.head:
75+
if (node == self.head):
7676
self.head = self.head.next
77-
if node == self.tail:
77+
if (node == self.tail):
7878
self.tail = self.tail.prev
79+
# checks if we are removing head or tail and updating new head or tail
7980
self.removeNodeBindings(node)
8081

82+
# O(n) time | O(1) space
8183
def containsNodeWithValue(self, value):
8284
node = self.head
83-
while node and node.value != value:
85+
while node is not None and node.value != value:
8486
node = node.next
8587
return node is not None
8688

8789
def removeNodeBindings(self, node):
88-
if node.prev:
90+
if node.prev is not None:
8991
node.prev.next = node.next
90-
if node.next:
92+
if node.next is not None:
9193
node.next.prev = node.prev
9294
node.prev = None
9395
node.next = None
96+
97+
98+
class node:
99+
def __init__(self, value):
100+
self.prev = None
101+
self.next = None
102+
self.value = value

algoexpert.io/python/Min_Number_Of_Jumps.py

+1-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
# Solution #1
2-
3-
42
# O(n^2) time | O(n) space
53
def minNumberOfJumps(array):
64
jumps = [float("inf") for x in array]
@@ -11,15 +9,8 @@ def minNumberOfJumps(array):
119
jumps[i] = min(jumps[i], jumps[j] + 1)
1210
return jumps[-1]
1311

14-
15-
16-
17-
18-
1912
# Solution #2
20-
21-
22-
# O(n) time | O(1) space
13+
# O(n) time | O(1) space
2314
def minNumberOfJumps(array):
2415
if len(array) == 1:
2516
return 0
+7-8
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
21
# O(n) time | O(1) space
32
def reverseLinkedList(head):
4-
p1, p2 = None, head
5-
while p2 is not None:
6-
p3 = p2.next
7-
p2.next = p1
8-
p1 = p2
9-
p2 = p3
10-
return p1
3+
prevN, nextN = None, None
4+
while head is not None:
5+
nextN = head.next
6+
head.next = prevN
7+
prevN = head
8+
head = nextN
9+
return prevN

0 commit comments

Comments
 (0)