-
Notifications
You must be signed in to change notification settings - Fork 9
/
singly-linked-list.py
143 lines (114 loc) · 3.39 KB
/
singly-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
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
# Python implementation of Singly Linked List and its operations
class Node:
# Create a node
def __init__(self, item):
self.item = item
self.next = None
class LinkedList:
def __init__(self):
self.head = None
# Insert: Beginning
def insertBeg(self, newItem):
newNode = Node(newItem)
newNode.next = self.head
self.head = newNode
# Insert: End
def insertEnd(self, newItem):
newNode = Node(newItem)
if self.head is None:
self.head = newNode
return
last = self.head
while(last.next):
last = last.next
last.next = newNode
# Insert: After a node
def insertAfterNode(self, prevNode, newItem):
if prevNode is None:
print('The given previous node must be in the Linked List')
return
newNode = Node(newItem)
newNode.next = prevNode.next
prevNode.next = newNode
# 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
for i in range(position - 1):
temp = temp.next
if temp is None:
break
if temp is None:
return
if temp.next is None:
return
next = temp.next.next
temp.next = None
temp.next = next
# Search for an element
def search(self, key):
current = self.head
while current is not None:
if current.item == key:
return True
current = current.next
return False
# Sort Linked List
def sort(self, head):
current = head
index = Node(None)
if head is None:
return
else:
while current is not None:
index = current.next
while index is not None:
if current.item > index.item:
current.item, index.item = index.item, current.item
index = index.next
current = current.next
# Print the linked list
def printList(self):
temp = self.head
while (temp):
print(str(temp.item) + " ", end="")
temp = temp.next
# Driver code
if __name__ == '__main__':
linkedList = LinkedList()
# Assign Data
linkedList.head = Node(1)
second = Node(2)
third = Node(3)
# Connect the nodes
linkedList.head.next = second
second.next = third
# Print the Linked List
while linkedList.head != None:
print(linkedList.head.item, end=' ')
linkedList.head = linkedList.head.next
llist = LinkedList()
llist.insertEnd(1)
llist.insertBeg(2)
llist.insertBeg(3)
llist.insertEnd(4)
llist.insertAfterNode(llist.head.next, 5)
print('Linked List:')
llist.printList()
print("\nAfter 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.sort(llist.head)
print("Sorted List: ")
llist.printList()