input: Write a function to create a bidirectional linked-list in Python with methods to append, prepend, and reverse the list. The function should return the linked-list object itself for further operations. If the input is missing or an empty list, return an empty linked-list.
  assert create_linked_list([]).head == None
  assert create_linked_list([1]).head.data == 1 and create_linked_list([1]).head.next == None
  assert create_linked_list([1, 2]).head.data == 1 and create_linked_list([1, 2]).head.next.data == 2
  assert create_linked_list([3, 2, 1]).reverse().head.data == 1 and create_linked_list([3, 2, 1]).reverse().head.next.data == 2
output: class Node:
      def __init__(self, data):
          self.data = data
          self.next = None
          self.prev = None
  
  class LinkedList:
      def __init__(self):
          self.head = None
          self.tail = None
  
      def append(self, data):
          new_node = Node(data)
          if not self.head:
              self.head = new_node
              self.tail = new_node
          else:
              new_node.prev = self.tail
              self.tail.next = new_node
              self.tail = new_node
  
      def prepend(self, data):
          new_node = Node(data)
          if not self.head:
              self.head = new_node
              self.tail = new_node
          else:
              new_node.next = self.head
              self.head.prev = new_node
              self.head = new_node
  
      def reverse(self):
          current = self.head
          while current:
              current.next, current.prev = current.prev, current.next
              current = current.prev
          self.head, self.tail = self.tail, self.head
          return self
  
  def create_linked_list(data_list=None):
      if not data_list:
          return LinkedList()
      linked_list = LinkedList()
      for data in data_list:
          linked_list.append(data)
      return linked_list