-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathlinked_list.py
72 lines (57 loc) · 1.89 KB
/
linked_list.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
71
72
class Node:
def __init__(self, data=None, next=None):
self.data = data
self.next = next
def __repr__(self):
return repr(self.data)
class LinkedList:
def __init__(self):
self.head = None
def __repr__(self):
nodes = []
current_node = self.head.next
while current_node:
nodes.append(repr(current_node))
current_node = current_node.next
return ",".join(nodes)
def append(self, data):
node = Node(data)
if self.head is None:
self.head = Node(None, node)
return
current_node = self.head.next
while current_node.next:
current_node = current_node.next
current_node.next = node
def prepend(self, data):
node = Node(data, self.head.next)
self.head.next = node
def insert(self, data, new_data):
current_node = self.head.next
while current_node:
if current_node.data == data:
new_node = Node(new_data, current_node.next)
current_node.next = new_node
break
current_node = current_node.next
def search(self, item):
current_node = self.head.next
while current_node:
if current_node.data == item:
return current_node
current_node = current_node.next
return None
def remove(self, item):
previous_node = self.head
current_node = previous_node.next
while current_node:
if current_node.data == item:
break
previous_node = current_node
current_node = current_node.next
if current_node is None:
return None
if self.head == previous_node:
self.head.next = current_node.next
else:
previous_node.next = current_node.next