-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlinkedList.py
More file actions
127 lines (103 loc) · 2.94 KB
/
linkedList.py
File metadata and controls
127 lines (103 loc) · 2.94 KB
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
class Node:
def __init__(self, v):
self.value = v
self.next = None
class LinkedList:
def __init__(self):
self.head = None
self.tail = None
def add_in_tail(self, item):
if self.head is None:
self.head = item
else:
self.tail.next = item
self.tail = item
def print_all_nodes(self):
node = self.head
while node != None:
print(node.value)
node = node.next
def get_all(self):
res = []
node = self.head
while node != None:
res.append(node.value)
node = node.next
return res
def get_all_nodes(self):
res = []
node = self.head
while node != None:
res.append(node)
node = node.next
return res
def find(self, val):
node = self.head
while node is not None:
if node.value == val:
return node
node = node.next
return None
def find_all(self, val):
res = []
node = self.head
while node is not None:
if node.value == val:
res.append(node)
node = node.next
return res
def delete(self, val, all=False):
node = self.head
prev_node = None
while node != None:
if node.value == val:
if node == self.head: # is first
self.head = node.next
prev_node = None
if node.next == None: # is last
self.tail = prev_node
if prev_node != None:
prev_node.next = None
node = None
if prev_node != None and node != None:
prev_node.next = node.next
if node != None:
node = node.next
if all == False:
return
else:
prev_node = node
node = node.next
def clean(self):
self.head = None
self.tail = None
def len(self):
len = 0
node = self.head
while node is not None:
node = node.next
len += 1
return len
def insert(self, afterNode, newNode):
if newNode is None:
return
if afterNode is None:
if self.head is None:
self.head = newNode
else:
newNode.next = self.head
self.head = newNode
else:
newNode.next = afterNode.next
afterNode.next = newNode
if newNode.next is None:
self.tail = newNode
def get_head(self):
return self.head
def get_tail(self):
return self.tail
def create_list(self, array_list):
list1 = LinkedList()
for val in array_list:
list1.add_in_tail(Node(val))
return list1