Below is my attempt at a doubly-linked list in Python (3):
class LinkedListNode:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
class LinkedList:
def __init__(self):
self.head = self.tail = None
self.size = 0
def get_first(self):
if self.head:
return self.head.value
raise Exception('Reading from an empty list.')
def get_last(self):
if self.tail:
return self.tail.value
raise Exception('Reading from an empty list.')
def add_first(self, value):
node = LinkedListNode(value)
if self.head:
node.right = self.head
self.head.left = node
self.size += 1
else:
self.head = self.tail = LinkedListNode(value)
self.size = 1
def add_last(self, value):
node = LinkedListNode(value)
if self.tail:
node.left = self.tail
self.tail.right = node
self.size += 1
else:
self.head = self.tail = node
self.size = 1
def remove_first(self):
if self.head:
ret = self.head.value
self.head = self.head.right
self.head.left = None
self.size -= 1
return ret
raise Exception('Removing from an empty list.')
def remove_last(self):
if self.tail:
ret = self.tail.value
self.tail = self.tail.left
self.tail.right = None
self.size -= 1
return ret
raise Exception('Removing from an empty list.')
def __repr__(self):
str = '['
if self.size > 0:
str += self.head.value
node = self.head.right
while node:
str += ', ' + node.value
node = node.right
return str + ']'
def main():
list = LinkedList()
while True:
cmd_line = input()
if cmd_line == 'quit':
break
command_tokens = cmd_line.split()
command = command_tokens[0]
try:
if command == "get_first":
print(list.get_first())
elif command == "get_last":
print(list.get_last())
elif command == "add_first":
list.add_first(command_tokens[1])
elif command == "add_last":
list.add_last(command_tokens[1])
elif command == "remove_first":
list.remove_first()
elif command == "remove_last":
list.remove_last()
elif command == "print":
print(list)
except Exception:
print("Unknown command")
main()
How would I rewrite it in a professional manner?
self.headnorself.tailis ever updated anymore. \$\endgroup\$