      "            else:\n",
      "                prev_node = curr_node\n",
      "                curr_node = curr_node.next\n",
      "\n",
      "    def print_list(self):\n",
      "        curr_node = self.head\n",
      "        while curr_node is not None:\n",
      "            print(curr_node.data)\n",
      "            curr_node = curr_node.next\n",
 
</s> remove     "            else:\n",
    "                curr_node = curr_node.next\n",
    "        return\n",
 </s> add     "            curr_node = curr_node.next\n",
    "        return None\n", </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", </s> remove     "            return\n",
 </s> add     "            return None\n", </s> remove     "            return\n",
    "        node = Node(data, next_node)\n",
 </s> add     "            return None\n",
    "        node = Node(data)\n", </s> remove     "            return\n",
 </s> add     "            return None\n",
    "    def delete_alt(self, data):\n",
    "        if data is None:\n",
    "            return\n",
    "        if self.head is None:\n",
    "            return\n",
    "        curr_node = self.head\n",
    "        if curr_node.data == data:\n",
    "            curr_node = curr_node.next\n",
    "            return\n",
    "        while curr_node.next is not None:\n",
    "            if curr_node.next.data == data:\n",
    "                curr_node.next = curr_node.next.next\n",
    "                return\n",
    "            curr_node = curr_node.next\n",
    "\n",
      "            else:\n",
      "                prev_node = curr_node\n",
      "                curr_node = curr_node.next\n",
      "\n",
    "    def delete_alt(self, data):\n",
    "        if data is None:\n",
    "            return\n",
    "        if self.head is None:\n",
    "            return\n",
    "        curr_node = self.head\n",
    "        if curr_node.data == data:\n",
    "            curr_node = curr_node.next\n",
    "            return\n",
    "        while curr_node.next is not None:\n",
    "            if curr_node.next.data == data:\n",
    "                curr_node.next = curr_node.next.next\n",
    "                return\n",
    "            curr_node = curr_node.next\n",
    "\n",
      "    def print_list(self):\n",
      "        curr_node = self.head\n",
      "        while curr_node is not None:\n",
      "            print(curr_node.data)\n",
      "            curr_node = curr_node.next\n",
keep keep keep add keep keep keep keep keep
 Polish linked list challenge and solution

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