input: Write a function to delete a specified node from a linked list. If the node to be deleted is the head node, update the head to the next node. If the node is not found in the list, return the list unchanged. If the list is empty, return the list as is.
  assert deleteNode(LinkedList([1, 2, 3, 4]), Node(3))==LinkedList([1, 2, 4])
  assert deleteNode(LinkedList([1, 2, 3, 4]), Node(1))==LinkedList([2, 3, 4])
  assert deleteNode(LinkedList([1, 2, 3, 4]), Node(4))==LinkedList([1, 2, 3])
  assert deleteNode(LinkedList([1, 2, 3, 4]), Node(5))==LinkedList([1, 2, 3, 4])
  assert deleteNode(LinkedList([]), Node(1))==LinkedList([])
output: def deleteNode(linked_list, node_to_delete):
      if not linked_list.head:
          return linked_list
      
      if linked_list.head.value == node_to_delete.value:
          linked_list.head = linked_list.head.next
          return linked_list
      
      current = linked_list.head
      while current.next:
          if current.next.value == node_to_delete.value:
              current.next = current.next.next
              return linked_list
          current = current.next
      
      return linked_list