-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlinkedlists.py
More file actions
113 lines (101 loc) · 2.54 KB
/
linkedlists.py
File metadata and controls
113 lines (101 loc) · 2.54 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
class Node:
def __init__(self, data=None, next=None):
self.data = data
self.next = next
class LinkedList:
def __init__(self):
self.head = None
def insert_beg(self, data):
node = Node(data, self.head)
self.head = node
def lprint(self):
if self.head is None:
print("list is empty")
return
itr = self.head
lv = ""
while itr:
lv += str(itr.data) + "-->"
itr = itr.next
print(lv)
def insert_end(self, data):
node = Node(data)
itr = self.head
while itr.next:
itr = itr.next
itr.next = node
def get_length(self):
itr = self.head
count = 0
while itr:
count += 1
itr = itr.next
return count
def insert_at(self,idx,data):
if idx == 0:
self.insert_beg(data)
return
if idx == self.get_length()-1:
self.insert_end(data)
return
count = 0
node = Node(data)
itr = self.head
while itr:
if count == idx-1:
node.next, itr.next = itr.next.next, node
count += 1
itr = itr.next
return
def insert_after(self,idx,data):
itr = self.head
while itr:
if itr.data == idx:
node = Node(data, itr.next)
itr.next = node
break
itr = itr.next
def remove_at(self, idx):
length = self.get_length()
if idx < 0 or idx >= length:
raise Exception("invalid index")
if idx == 0:
self.head = self.head.next
return
itr = self.head
count = 0
while itr:
if count == idx-1:
itr.next = itr.next.next
break
count += 1
itr = itr.next
def remove_value(self,data):
itr = self.head
while itr:
if itr.data == data:
pitr.next = itr.next
break
pitr = itr
itr = itr.next
if __name__ == '__main__':
ll = LinkedList()
ll.insert_beg(5)
ll.insert_beg(8)
ll.insert_beg(3)
ll.insert_end(10)
ll.insert_beg(7)
ll.lprint()
ll.remove_at(0)
ll.lprint()
ll.remove_at(2)
ll.lprint()
ll.insert_at(0, 20)
ll.insert_at(2, 30)
ll.lprint()
ll.insert_after(10,100)
ll.lprint()
ll.insert_after(3,300)
ll.lprint()
ll.remove_value(10)
ll.lprint()