Skip to content

Commit 97a792a

Browse files
committed
committed from zkp
1 parent 5c91b7f commit 97a792a

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

LeetCode/Queue.py

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
class Node(object):
2+
def __init__(self, value=None):
3+
self.value = value
4+
self.next = None
5+
class LinkedNode(object):
6+
def __init__(self, maxsize=None):
7+
self.maxsize = maxsize
8+
self.root = Node()
9+
self.length = 0
10+
self.tailnode = None
11+
def __len__(self):
12+
return self.length
13+
def append(self, value):
14+
if self.maxsize is not None and len(self) > self.maxsize:
15+
raise Exception('full')
16+
node = Node(value)
17+
if self.root.next is None:
18+
self.tailnode = node
19+
self.root.next = self.tailnode
20+
else:
21+
curnode = self.tailnode
22+
curnode.next = node
23+
self.tailnode = node
24+
self.length += 1
25+
def append_left(self, value):
26+
node = Node(value)
27+
headnode = self.root.next
28+
self.root.next = node
29+
node.next = headnode
30+
self.length += 1
31+
def iter_node(self):
32+
curnode = self.root.next
33+
while curnode:
34+
yield curnode
35+
curnode = curnode.next
36+
def __iter__(self):
37+
for node in self.iter_node():
38+
yield node.value
39+
def remove(self, value):
40+
prevnode = self.root
41+
while prevnode:
42+
curnode = prevnode.next
43+
if (curnode is not None) and (curnode.value == value):
44+
prevnode.next = curnode.next
45+
self.length -= 1
46+
return 1
47+
prevnode = prevnode.next
48+
return -1
49+
def popleft(self):
50+
headnode = self.root.next
51+
if headnode is None:
52+
raise Exception('pop from empty LinkedList')
53+
val = headnode.value
54+
self.root.next = headnode.next
55+
self.length -= 1
56+
del headnode
57+
return val
58+
def clear(self):
59+
for node in self.iter_node():
60+
del node
61+
self.root.next = None
62+
self.length = 0
63+
def find(self, value):
64+
index = 0
65+
for node in self.iter_node():
66+
if node.value == value:
67+
return index
68+
index += 1
69+
return -1
70+
class Queue(object):
71+
def __init__(self, maxsize=None):
72+
self.maxsize = maxsize
73+
self._item_linked_list = LinkedNode()
74+
def __len__(self):
75+
return len(self._item_linked_list)
76+
def push(self,value):
77+
if self.maxsize is not None and len(self) > self.maxsize:
78+
raise Exception('full')
79+
return self._item_linked_list.append(value)
80+
def pop(self):
81+
if len(self) == 0:
82+
raise Exception('queue empty')
83+
return self._item_linked_list.popleft()
84+
def test_queue():
85+
q = Queue()
86+
for i in range(3):
87+
q.push(i)
88+
assert q.pop() == 0
89+
assert q.pop() == 1
90+
assert q.pop() == 2
91+
assert len(q) == 0
92+
print("successful")
93+
if __name__ == "__main__":
94+
test_queue()

0 commit comments

Comments
 (0)