Source code for pyDS.linked_list
[docs]class Node():
"""Building Block of Linked List."""
def __init__(self, data):
"""Initialize Node.
Args:
data: The data to be stored.
"""
self.data = data
self.next = None
def __str__(self):
"""String representation of Node."""
return "({}, {})".format(self.data, self.next)
def __repr__(self):
"""Representation of Node."""
return "pyDS.linked_list.Node({}, {})".format(self.data, self.next)
[docs]class LinkedList():
"""An implementation of the Linked List data structure."""
def __init__(self):
"""Initialize Linked List."""
self.head = None
def __repr__(self):
"""Representation of Linked List."""
return "pyDS.linked_list.LinkedList({})".format(self.head)
def __iter__(self):
"""Iterate through the Linked List.
Returns:
Generator object.
"""
ptr = self.head
while (ptr):
yield ptr.data
ptr = ptr.next
def __reversed__(self):
"""Reverse the Linked List."""
self.reverse()
[docs] def push(self, item):
"""Add item to the front of the Linked List.
Args:
item: The item to be inserted.
"""
new_node = Node(item)
new_node.next = self.head
self.head = new_node
[docs] def append(self, item):
"""Add item to the end of the Linked List.
Args:
item: The item to be inserted.
"""
new_node = Node(item)
if self.head is None:
self.head = new_node
return
ptr = self.head
while (ptr.next):
ptr = ptr.next
ptr.next = new_node
[docs] def delete(self, item):
"""Delete an item from the Linked List."""
if self.head is None:
raise IndexError('Empty Linked List')
elif self.head.data == item:
self.head = self.head.next
return
temp = self.head
prev = None
while (temp):
if temp.data == item:
break
prev = temp
temp = temp.next
if temp is None:
raise ValueError('Item {} not in Linked List'.format(item))
else:
prev.next = temp.next
[docs] def reverse(self):
"""Reverse the items of the Linked List."""
current_ptr = self.head
prev_ptr = None
while current_ptr:
next_ptr = current_ptr.next
current_ptr.next = prev_ptr
prev_ptr = current_ptr
current_ptr = next_ptr
self.head = prev_ptr