      "        * Update previous node's next pointer to the current node's next pointer\n",
      "        * We do not have have to explicitly delete in Python\n",
      "    * Else, move on to the next node\n",
      "\n",
      "Complexity:\n",
      "* Time: O(n)\n",
      "* Space: O(1)\n",
 
</s> remove     "* Create a node with the input data\n",
    "* If this is an empty list\n",
    "    * Assign the head to the node\n",
    "* Else\n",
    "    * Set the node.next to the head\n",
    "    * Set the head to the node\n",
 </s> add     "* Create a node with the input data, set node.next to head\n",
    "* Assign the head to the node\n", </s> remove     "    * Just the head"
 </s> add     "    * Just the head\n",
    "* Can we insert None values?\n",
    "    * No" </s> remove     "    * Just the head"
 </s> add     "    * Just the head\n",
    "* Can we insert None values?\n",
    "    * No" </s> remove     def __init__(self, data, next_node=None):
        self.next = next_node
 </s> add     def __init__(self, data, next=None):
        self.next = next </s> remove     "            self.head = node\n",
    "        else:\n",
    "            curr_node = self.head\n",
    "            while curr_node.next is not None:\n",
    "                curr_node = curr_node.next\n",
    "            curr_node.next = node\n",
 </s> add     "            self.head = Node(data)\n",
    "            return node\n",
    "        curr_node = self.head\n",
    "        while curr_node.next is not None:\n",
    "            curr_node = curr_node.next\n",
    "        curr_node.next = node\n",
    "* As an alternative, we could avoid the use of two pointers by evaluating the current node's next value:\n",
    "    * If the next value is a match, set the current node's next to next.next\n",
    "    * Special care should be taken if deleting the head node\n",
      "        * Update previous node's next pointer to the current node's next pointer\n",
      "        * We do not have have to explicitly delete in Python\n",
      "    * Else, move on to the next node\n",
    "* As an alternative, we could avoid the use of two pointers by evaluating the current node's next value:\n",
    "    * If the next value is a match, set the current node's next to next.next\n",
    "    * Special care should be taken if deleting the head node\n",
      "\n",
      "Complexity:\n",
      "* Time: O(n)\n",
      "* Space: O(1)\n",
keep keep add keep keep keep keep
 Polish linked list challenge and solution

Update algorithm discussion, solution, and constraints. 
linked_lists/linked_list/linked_list_solution.ipynb