Skip to content

Commit c4fa122

Browse files
committed
Merge pull request #212
2 parents f83750a + 1b5f747 commit c4fa122

File tree

4 files changed

+115
-0
lines changed

4 files changed

+115
-0
lines changed

config.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,12 @@
417417
"difficulty": 1,
418418
"topics": [
419419
]
420+
},
421+
{
422+
"slug": "linked-list",
423+
"difficulty": 1,
424+
"topics": [
425+
]
420426
}
421427
],
422428
"deprecated": [

exercises/linked-list/example.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
class Node(object):
2+
def __init__(self, value, next=None, prev=None):
3+
self.value = value
4+
self.next = next
5+
self.prev = prev
6+
7+
8+
class LinkedList(object):
9+
def __init__(self):
10+
self.head = None
11+
self.tail = None
12+
13+
def push(self, value):
14+
new_node = Node(value)
15+
if not self.head:
16+
self.head = self.tail = new_node
17+
else:
18+
new_node.prev = self.tail
19+
self.tail.next = new_node
20+
self.tail = new_node
21+
22+
def pop(self):
23+
node = self.tail
24+
if node is None or node.prev is None:
25+
self.head = self.tail = None
26+
else:
27+
self.tail = self.tail.prev
28+
self.tail.next = None
29+
return node.value
30+
31+
def shift(self):
32+
node = self.head
33+
if node is None or node.next is None:
34+
self.head = self.tail = None
35+
else:
36+
self.head = self.head.next
37+
self.head.prev = None
38+
return node.value
39+
40+
def unshift(self, value):
41+
new_node = Node(value)
42+
if not self.head:
43+
self.head = self.tail = new_node
44+
else:
45+
new_node.next = self.head
46+
self.head.prev = new_node
47+
self.head = new_node

exercises/linked-list/linked_list.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Skeleton file for the Python "linked-list" exercise.
2+
3+
4+
class Node(object):
5+
def __init__(self, value, next=None, prev=None):
6+
self.value = value
7+
self.next = next
8+
self.prev = prev
9+
10+
11+
class LinkedList(object):
12+
def __init__(self):
13+
pass # Complete the Deque class ...
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import unittest
2+
3+
from linked_list import LinkedList
4+
5+
6+
class LinkedListTests(unittest.TestCase):
7+
8+
def setUp(self):
9+
self.list = LinkedList()
10+
11+
def test_push_pop(self):
12+
self.list.push(10)
13+
self.list.push(20)
14+
self.assertEqual(20, self.list.pop())
15+
self.assertEqual(10, self.list.pop())
16+
17+
def test_push_shift(self):
18+
self.list.push(10)
19+
self.list.push(20)
20+
self.assertEqual(10, self.list.shift())
21+
self.assertEqual(20, self.list.shift())
22+
23+
def test_unshift_shift(self):
24+
self.list.unshift(10)
25+
self.list.unshift(20)
26+
self.assertEqual(20, self.list.shift())
27+
self.assertEqual(10, self.list.shift())
28+
29+
def test_unshift_pop(self):
30+
self.list.unshift(10)
31+
self.list.unshift(20)
32+
self.assertEqual(10, self.list.pop())
33+
self.assertEqual(20, self.list.pop())
34+
35+
def test_all(self):
36+
self.list.push(10)
37+
self.list.push(20)
38+
self.assertEqual(20, self.list.pop())
39+
self.list.push(30)
40+
self.assertEqual(10, self.list.shift())
41+
self.list.unshift(40)
42+
self.list.push(50)
43+
self.assertEqual(40, self.list.shift())
44+
self.assertEqual(50, self.list.pop())
45+
self.assertEqual(30, self.list.shift())
46+
47+
48+
if __name__ == '__main__':
49+
unittest.main()

0 commit comments

Comments
 (0)