-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLinkedList.py
More file actions
146 lines (123 loc) · 3.46 KB
/
LinkedList.py
File metadata and controls
146 lines (123 loc) · 3.46 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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
class Node:
#Creating a Node
def __init__(self,item):
self.item = item
self.next = None
class LinkedList:
def __init__(self):
self.head = None
if __name__ == '__main__':
linkedlist = LinkedList()
#Assign item values
linked_list.head = Node(1)
second = Node(2)
third = Node(3)
#Connect Nodes
linked_list.head.next = second
second.next = third
#Print the linkedlist item
while linked_list.head !=None:
print(linked_list.head.item,end='')
linked_list.head = linked_list.head.next
#Second Example
#create a node
class Node:
def __init__(self,data):
self.data=data
self.next=None
class LinkedList:
def __init__(self):
self.head = None
#Insert at the beginning
def insertAtBeginning(self,new_data):
new_node=Node(new_data)
new_node.next =self.head
self.head = new_node
#Insert after a node
def insertAtAfter(self,prev_node,new_data):
if prev_node is None:
print("The given previous node must linkedlist")
return
new_node = Node(new_data)
new_node.next = prev_node.next
prev_node.next = new_node
#Insert at the end
def insertAtEnd(self,new_data):
new_node = Node(new_data)
if self.head is None:
self.head = new_node
return
last = self.head
while(last.next):
last = last.next
last.next = new_node
#Deleting a node
def deleteNode(self,position):
if self.head is None:
return
temp = self.head
if position == 0:
self.head = temp.next
temp = None
return
#Find the key to be deleted
for i in range(position -1):
temp = temp.next
if temp is None
break
#If the key is not present
if temp is None:
return
if temp.next is None:
return
next = temp.next.next
temp.next = next
#Search an element
def search(self,key):
current = self.head
while current is not None:
if current.data == key:
return True
current = current.next
return false
#sort the linkedlist
def sortLinkedList(self,head):
current = head
index = None(node)
if head is None:
return
else:
while current is Not None:
index = current.next
while index is not None:
if current.data>index.data:
current.data,index.data=index.data,current.data
index = index.next
current = current.next
#Print the linked list
def printList(self):
temp = self.head
while(temp):
print(str(temp.data)+"",end="")
temp = temp.next
if __name__ == '__main__':
llist = Linkedlist()
llist.insertAtEnd(1)
llist.insertAtBeginning(2)
llist.insertAtBeginning(3)
llist.insertAtEnd(4)
llist.insertAtAfter(llist.head.next,5)
print('linked list')
list.printlist()
print('\n After deleting an Element')
llist.deleteNode(3)
llist.printList()
print()
item_to_find =3
if llist.search(item_to_find):
print(str(item_to_find)+"is found")
else:
print(str(item_to_find)+"is not found")
llist.sortLinkedList(llist.head)
print("sorted list")
llist.printList()