Skip to content

Commit f75de58

Browse files
authored
Merge pull request #10 from jreuben11/leetcode
refresher - single linked list
2 parents 5a2c08b + 51e0289 commit f75de58

File tree

1 file changed

+158
-0
lines changed

1 file changed

+158
-0
lines changed

leetcode/LinkedListNew.py

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
class Node:
2+
def __init__(self, value):
3+
self.value = value
4+
self.next = None
5+
6+
class LinkedList:
7+
# def __init__(self, value):
8+
# new_node = Node(value)
9+
# self.head = new_node
10+
# self.tail = new_node
11+
# self.length = 1
12+
13+
def __init__(self):
14+
self.head = None
15+
self.tail = None
16+
self.length = 0
17+
18+
def __str__(self):
19+
temp_node = self.head
20+
result = ''
21+
while temp_node is not None:
22+
result += str(temp_node.value)
23+
if temp_node.next is not None:
24+
result += ' -> '
25+
temp_node = temp_node.next
26+
return result
27+
28+
def append(self, value):
29+
new_node = Node(value)
30+
if self.head is None:
31+
self.head = new_node
32+
self.tail = new_node
33+
else:
34+
self.tail.next = new_node
35+
self.tail = new_node
36+
self.length += 1
37+
38+
def prepend(self, value):
39+
new_node = Node(value)
40+
if self.head is None:
41+
self.head = new_node
42+
self.tail = new_node
43+
else:
44+
new_node.next = self.head
45+
self.head = new_node
46+
self.length += 1
47+
48+
def insert(self, index, value):
49+
new_node = Node(value)
50+
if self.head is None:
51+
self.head = new_node
52+
self.tail = new_node
53+
elif index == 0:
54+
new_node.next = self.head
55+
self.head = new_node
56+
else:
57+
temp_node = self.head
58+
for _ in range(index-1):
59+
temp_node = temp_node.next
60+
new_node.next = temp_node.next
61+
temp_node.next = new_node
62+
self.length += 1
63+
64+
def traverse(self):
65+
current = self.head
66+
while current is not None:
67+
print(current.value)
68+
current = current.next
69+
70+
def search(self, target):
71+
current = self.head
72+
while current is not None:
73+
if current.value == target:
74+
return True
75+
current = current.next
76+
return False
77+
78+
def search(self, target):
79+
current = self.head
80+
index = 0
81+
while current is not None:
82+
if current.value == target:
83+
return index
84+
current = current.next
85+
index += 1
86+
return -1
87+
88+
def get(self, index):
89+
if index == -1:
90+
return self.tail
91+
elif index < -1 or index >= self.length:
92+
return None
93+
current = self.head
94+
for _ in range(index):
95+
current = current.next
96+
return current
97+
98+
def set_value(self, index, value):
99+
temp = self.get(index)
100+
if temp:
101+
temp.value = value
102+
return True
103+
return False
104+
105+
def pop_first(self):
106+
if self.length == 0:
107+
return None
108+
popped_node = self.head
109+
if self.length == 1:
110+
self.head = None
111+
self.tail = None
112+
else:
113+
self.head = self.head.next
114+
popped_node.next = None
115+
self.length -= 1
116+
return popped_node
117+
118+
119+
120+
def pop(self):
121+
if self.length == 0:
122+
return None
123+
popped_node = self.tail
124+
if self.length == 1:
125+
self.head = self.tail = None
126+
else:
127+
temp = self.head
128+
while temp.next is not self.tail:
129+
temp = temp.next
130+
temp.next = None
131+
self.tail = temp
132+
self.length -= 1
133+
return popped_node
134+
135+
136+
def remove(self, index):
137+
if index < -1 or index >= self.length:
138+
return None
139+
if index == 0:
140+
return self.pop_first()
141+
if index == -1 or index == self.length-1:
142+
return self.pop()
143+
prev_node = self.get(index-1)
144+
popped_node = prev_node.next
145+
prev_node.next = popped_node.next
146+
popped_node.next = None
147+
self.length -= 1
148+
return popped_node
149+
150+
151+
linked_list = LinkedList()
152+
linked_list.append(10)
153+
linked_list.append(20)
154+
linked_list.append(30)
155+
linked_list.append(40)
156+
print(linked_list)
157+
print(linked_list.remove(0))
158+
print(linked_list)

0 commit comments

Comments
 (0)