DoublyLinkedLists
Initializing a Doubly Linked list
You can initialize a Doubly linked list by simply creating a Doubly linked list object and optionally pass in a list object witch would contain the initial list items.
from structlinks.DataStructures import DoublyLinkedList
# create an empty linked list
lst = DoublyLinkedList()
# create a linked list with initial values
lst = DoublyLinkedList([1, 10, -3, 5])
Basic Operations
The idea for all of the basic operations is similar to that of Linked lists, which were taken from the University of Toronto’s CSC111 course.
from structlinks.DataStructures import DoublyLinkedList
lst = DoublyLinkedList([1, 10, 3, 5])
# print the list
print(lst) # this will print : [1 <--> 10 <--> 3 <--> 5]
# Length of the list
length = len(lst) # length = 4
# Append items
lst.append(2) # After the call, lst = [1 <--> 10 <--> 3 <--> 5 <--> 2]
# Insert items
lst.insert(0, 200) # After the call, lst = [200 <--> 1 <--> 10 <--> 3 <--> 5 <--> 2]
# Get & Set item by index
item = lst[1] # here item = 10
lst[2] = 100 # set element at index 2 to be 100, so lst = [200 <--> 1 <--> 100 <--> 3 <--> 5 <--> 2]
# Slicing the list
part = lst[2:] # here part = [100 <--> 3 <--> 5 <--> 2]
# Removing element
# 1) by index
popped = lst.pop(0) # here popped = 200, and lst = [1 <--> 100 <--> 3 <--> 5 <--> 2]
# 2) by item value
lst.remove(1) # now list lst = [100 <--> 3 <--> 5 <--> 2]
# Checking for Element
cond1 = 2 in lst # here cond1 is True as 2 is in lst
cond2 = 1 in lst # here cond2 is False as 1 is not in lst
# Adding to Doubly Linked Lists
lst1 = DoublyLinkedList([1, 10, 3, 5])
lst2 = DoublyLinkedList([2, 100, 4, 0])
lst3 = lst1 + lst2 # lst3 = [1 <--> 10 <--> 3 <--> 5 <--> 2 <--> 100 <--> 4 <--> 0]
# Count of an item
count = lst.count(2) # count = 1 as 2 appears only once
# Index of an item (return -1 if element not in lst)
index = lst.index(100) # index = 0 as 100 is at index 0
# Equating to lists
cond3 = lst1 == lst2 # cond3 = False as lst1 and lst2 have different elements
# Sort the list
lst.sort() # lst will be mutated to [2 <--> 3 <--> 5 <--> 100]
# Extend the list
lst.extend(lst2) # lst will be mutated to [2 <--> 3 <--> 5 <--> 100 <--> 2 <--> 100 <--> 4 <--> 0]
# Copy the list
lst4 = lst.copy() # lst4 is a copy of lst
Additional Operations
Inverting a Doubly Linked List
from structlinks.DataStructures import DoublyLinkedList
lst = DoublyLinkedList([1, 10, 3, 5])
print(lst)
# Output:
# [1 <--> 10 <--> 3 <--> 5]
lst.invert() # mutate lst
print(lst)
# Output:
# [5 <--> 3 <--> 10 <--> 1]
Mapping functions to a Doubly Linked List
from structlinks.DataStructures import DoublyLinkedList
lst = DoublyLinkedList([1, 10, 3, 5])
# Map function f(x) = x^2
new_lst = lst.map(lambda x: x ** 2)
print(new_lst)
# Output:
# [25 <--> 9 <--> 100 <--> 1]
Inbuilt Mapping functions
from structlinks.DataStructures import DoublyLinkedList
lst = DoublyLinkedList([1.1, 10.5, -3.7, 5.2])
#abs
abs_lst = lst.abs()
print(abs_lst)
# Output:
# [1.1 <--> 10.5 <--> 3.7 <--> 5.2]
# floor
floor_lst = lst.floor()
print(floor_lst)
# Output:
# [1.0 <--> 10.0 <--> 3.0 <--> 5.0]
# ceil
ceil_lst = lst.ceil()
print(ceil_lst)
# Output:
# [2.0 <--> 11.0 <--> 4.0 <--> 6.0]