      "    def __str__(self):\n",
      "        return self.data\n",
      "\n",
      "class LinkedList(object):\n",
      "    def __init__(self, head):\n",
      "        self.head = head\n",
      "    \n",
      "    def insert_to_front(self, data):\n",
      "        if data is None:\n",
      "            return\n",
 
</s> remove     "    def __init__(self, data):\n",
    "        self.next = None\n",
 </s> add     "    def __init__(self, data, next_node=None):\n",
    "        self.next = next_node\n", </s> remove     "    def append(self, data):\n",
 </s> add     "    def append(self, data, next_node=None):\n", </s> remove     "        node = Node(data)\n",
 </s> add     "        node = Node(data, next_node)\n", </s> remove 
    def __len__(self):
        curr = self.head
        counter = 0
        while curr is not None:
            counter += 1
            curr = curr.next
        return counter
 </s> add  </s> remove     def append(self, data):
 </s> add     def append(self, data, next_node=None):
    "    def __init__(self, head=None):\n",
      "    def __str__(self):\n",
      "        return self.data\n",
      "\n",
      "class LinkedList(object):\n",
    "    def __init__(self, head=None):\n",
      "        self.head = head\n",
      "    \n",
      "    def insert_to_front(self, data):\n",
      "        if data is None:\n",
      "            return\n",
keep keep keep keep replace keep keep keep keep keep
 Updated Node and LinkedList to allow setting the next pointer on init, or when appending a node.  This is useful for circular linked list problems. 
linked-lists/linked-list.ipynb