# Implement a linked list
class Node:
def __init__(self, value):
self.value = value
self.next = None
class LinkedList:
def __init__(self, value):
self.head = Node(value)
self.tail = self.head
self.length = 1
def append(self, value):
node = Node(value)
self.tail.next = self.node
self.tail = node
self.length += 1
return self.head
def prepend(self, value):
node = Node(value)
node.next = self.head
self.head = node
self.length += 1
return self.head
def printList(self):
array = []
currentNode = self.head
while currentNode:
array.append(currentNode.value)
currentNode = currentNode.next
return array
def insert(index, value):
if index == 0:
return self.prepend(value)
elif index >= self.length:
return self.append(value)
node = Node(value)
currentNode = self.head.next
prevNode = self.head
count = 1
while currentNode:
if index == count:
prevNode.next = node
node.next = currentNode
self.length += 1
break
prevNode = currentNode
currentNode = currentNode.next
count += 1
return self.printList()
def remove(index):
if index == 0:
self.head = self.head.next
self.head.prev = None
self.length -= 1
return self.printList()
currentNode = self.head.next
prevNode = self.head
count = 1
while currentNode:
if index == count:
prevNode.next = currentNode.next
self.length -= 1
break
prevNode = currentNode
currentNode = currentNode.next
count += 1
return self.printList()
def reverse(self):
currentNode = self.head
prevNode = None
self.tail = self.head
while currentNode:
temp = currentNode
currentNode = currentNode.next
temp.next = prevNode
prevNode = temp
self.head = temp
return self.printList()
class Node:
def __init__(self, value):
self.value = value
self.prev = None
self.next = None
class DoublyLinkedList:
def __init__(self, value):
self.head = Node(value)
self.tail = self.head
self.length = 1
def append(self, value):
node = Node(value)
self.tail.next = node
node.prev = self.tail
self.tail = node
self.length += 1
return self.head
def prepend(self, value):
node = Node(value)
node.next = self.head
node.prev = None
self.head = node
self.length += 1
return self.head
def printList(self):
array = []
currentNode = self.head
while currentNode:
array.append(currentNode.value)
currentNode = currentNode.next
return array
def insert(index, value):
if index == 0:
return self.prepend(value)
elif index >= self.length:
return self.append(value)
node = Node(value)
currentNode = self.head.next
prevNode = self.head
count = 1
while currentNode:
if index == count:
prevNode.next = node
node.prev = prevNode
node.next = currentNode
currentNode.prev = node
self.length += 1
break
prevNode = currentNode
currentNode = currentNode.next
count += 1
return self.printList()
def remove(index):
if index == 0:
self.head = self.head.next
self.length -= 1
return self.printList()
currentNode = self.head.next
prevNode = self.head
count = 1
while currentNode:
if index == count:
prevNode.next = currentNode.next
currentNode.next.prev = prevNode
self.length -= 1
return self.printList()
prevNode = currentNode
currentNode = currentNode.next
count += 1
return self.printList()