Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 5 additions & 7 deletions Chapter04/CircularList.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@ class Node:
def __init__(self, data=None):
self.data = data
self.next = None






class CircularList:
def __init__ (self):
self.tail = None
Expand All @@ -16,13 +14,13 @@ def __init__ (self):
def append(self, data):
node = Node(data)
if self.tail:
self.tail.next = node
self.tail = node
self.tail.next = node
node.next = self.head
self.tail = node
else:
self.head = node
self.tail = node
self.tail.next = self.tail
self.tail.next = self.head
self.size += 1

def delete(self, data):
Expand Down
37 changes: 18 additions & 19 deletions Chapter04/append_at_any_location_singly_linkedlist.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ def __init__(self, data=None):
self.data = data
self.next = None


class SinglyLinkedList:
def __init__ (self):
self.tail = None
Expand All @@ -15,38 +15,39 @@ def append(self, data):
# Encapsulate the data in a Node
node = Node(data)
if self.head is None:
self.head = node
self.head = node
else:
current = self.head
while current.next:
current = current.next
current.next = node
self.size += 1

def append_at_a_location(self, data, index):
current = self.head
prev = self.head
node = Node(data)
count = 1
while current:
if count == 1:
if index == 1:
node.next = current
self.head = node
self.size += 1
print(count)
return
elif index == index:
node.next = current
prev.next = node
return
count += 1
prev = current
current = current.next
return
else:
while current:
if count == index:
node.next = current
prev.next = node
self.size += 1
return
count += 1
prev = current
current = current.next
if count < index:
print("The list has less number of elements")






words = SinglyLinkedList()
words.append('egg')
words.append('ham')
Expand All @@ -56,9 +57,7 @@ def append_at_a_location(self, data, index):
while current:
print(current.data)
current = current.next




words.append_at_a_location('new', 2)

current = words.head
Expand Down
27 changes: 12 additions & 15 deletions Chapter04/delete_operation_doubly_linkedlist.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ def __init__ (self, data = None, next = None, prev = None):
self.data = data
self.next = next
self.prev = prev



class DoublyLinkedList:
def __init__ (self):
self.head = None
self.tail = None
self.count = 0
self.size = 0

def append(self, data):
#Append an item to the list.
Expand All @@ -20,9 +21,7 @@ def append(self, data):
new_node.prev = self.tail
self.tail.next = new_node
self.tail = new_node
self.count += 1


self.size += 1

def delete(self, data):
# Delete a node from the list.
Expand All @@ -31,15 +30,15 @@ def delete(self, data):
if current is None: #List is empty
print("List is empty")
elif current.data == data: #Item to be deleted is found at starting of list
self.head.prev = None
node_deleted = True
self.head = current.next
self.head.prev = None
node_deleted = True

elif self.tail.data == data: #Item to be deleted is found at the end of list.
self.tail = self.tail.prev
self.tail.next = None
node_deleted = True

self.tail = self.tail.prev
self.tail.next = None
node_deleted = True
else:
while current: #search item to be deleted, and delete that node
if current.data == data:
Expand All @@ -50,11 +49,9 @@ def delete(self, data):
if node_deleted == False: #Item to be deleted is not found in the list
print("Item not found")
if node_deleted:
self.count -= 1
self.size -= 1





#Code to create for a doubly linked list
words = DoublyLinkedList()
words.append('egg')
Expand Down
13 changes: 7 additions & 6 deletions Chapter04/delete_operation_singly_linkedlist.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ def __init__(self, data=None):
self.data = data
self.next = None


class SinglyLinkedList:
def __init__ (self):
self.head = None
Expand All @@ -13,21 +14,22 @@ def append(self, data):
# Encapsulate the data in a Node
node = Node(data)
if self.head is None:
self.head = node
self.head = node
else:
current = self.head
while current.next:
current = current.next
current = current.next
current.next = node
self.size += 1

def delete_first_node (self):
current = self.head
if self.head is None:
print("No data element to delete")
elif current == self.head:
self.head = current.next

self.size -= 1

def delete_last_node (self):
current = self.head
prev = self.head
Expand All @@ -37,8 +39,7 @@ def delete_last_node (self):
self.size -= 1
prev = current
current = current.next



def delete(self, data):
current = self.head
prev = self.head
Expand Down
13 changes: 6 additions & 7 deletions Chapter04/doubly_linked_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ def __init__ (self, data = None, next = None, prev = None):
self.data = data
self.next = next
self.prev = prev



class DoublyLinkedList:
def __init__ (self):
self.head = None
self.tail = None
self.count = 0
self.size = 0

def append(self, data):
#Append an item at the end of the list.
Expand All @@ -20,7 +21,7 @@ def append(self, data):
new_node.prev = self.tail
self.tail.next = new_node
self.tail = new_node
self.count += 1
self.size += 1


def append_at_start(self, data):
Expand All @@ -33,7 +34,7 @@ def append_at_start(self, data):
new_node.next = self.head
self.head.prev = new_node
self.head = new_node
self.count += 1
self.size += 1

def append_at_a_location(self, data):
current = self.head
Expand All @@ -45,7 +46,7 @@ def append_at_a_location(self, data):
new_node.next = current
prev.next = new_node
current.prev = new_node
self.count += 1
self.size += 1
prev = current
current = current.next

Expand All @@ -66,8 +67,6 @@ def contains(self, data):
return




words = DoublyLinkedList()
words.append('egg')
words.append('ham')
Expand Down
1 change: 1 addition & 0 deletions Chapter04/faster_append_singly_linked_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ def append(self, data):
else:
self.head = node
self.tail = node
self.size += 1


words = SinglyLinkedList()
Expand Down
9 changes: 5 additions & 4 deletions Chapter04/list_traversal_singly_linklist.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,22 @@ def append(self, data):
# Encapsulate the data in a Node
node = Node(data)
if self.head is None:
self.head = node
self.head = node
else:
current = self.head
while current.next:
current = current.next
current = current.next
current.next = node

self.size += 1

def iter(self):
current = self.head
while current:
val = current.data
current = current.next
yield val


words = SinglyLinkedList()
words.append('egg')
words.append('ham')
Expand Down