      "collapsed": false
     },
     "outputs": [],
     "source": [
      "# Empty list\n",
      "linked_list = LinkedList(None)\n",
      "linked_list.delete_node(None)\n",
      "linked_list.print_list()\n",
      "# One node\n",
      "head = Node(2)\n",
      "linked_list = LinkedList(head)\n",
      "linked_list.delete_node(head)\n",
      "linked_list.print_list()\n",
      "# Multiple nodes\n",
      "node0 = linked_list.insert_to_front(1)\n",
      "node1 = linked_list.insert_to_front(3)\n",
      "node2 = linked_list.insert_to_front(4)\n",
      "node3 = linked_list.insert_to_front(1)\n",
      "linked_list.delete_node(node2)\n",
      "linked_list.print_list()"
     ]
    }
   ],
   "metadata": {
    "kernelspec": {
 
</s> remove    "outputs": [],
 </s> add    "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test: Empty list, null node to delete\n",
      "Test: One node\n",
      "Test: Multiple nodes\n",
      "Success: test_delete_node\n"
     ]
    }
   ], </s> remove     "            node.data = next.data\n",
    "            node.next = next.next"
 </s> add     "            node.data = node_next.data\n",
    "            node.next = node_next.next"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Unit Test"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*It is important to identify and run through general and edge cases from the [Test Cases](#Test-Cases) section by hand.  You generally will not be asked to write a unit test like what is shown below.*" </s> remove     "        next = node.next\n",
    "        if next is None:\n",
 </s> add     "        node_next = node.next\n",
    "        if node_next is None:\n", </s> remove    "execution_count": null,
 </s> add    "execution_count": 3, </s> remove    "execution_count": null,
 </s> add    "execution_count": 2,
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
      "collapsed": false
     },
     "outputs": [],
     "source": [
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
    "from nose.tools import assert_equal\n",
    "\n",
    "class Test(object):\n",
    "    def test_delete_node(self):\n",
    "        print('Test: Empty list, null node to delete')\n",
    "        linked_list = MyLinkedList(None)\n",
    "        linked_list.delete_node(None)\n",
    "        assert_equal(linked_list.get_all_data(), [])\n",
    "\n",
    "        print('Test: One node')\n",
    "        head = Node(2)\n",
    "        linked_list = MyLinkedList(head)\n",
    "        linked_list.delete_node(head)\n",
    "        assert_equal(linked_list.get_all_data(), [None])\n",
    "\n",
    "        print('Test: Multiple nodes')\n",
    "        linked_list = MyLinkedList(None)        \n",
    "        node0 = linked_list.insert_to_front(1)\n",
    "        node1 = linked_list.insert_to_front(3)\n",
    "        node2 = linked_list.insert_to_front(4)\n",
    "        node3 = linked_list.insert_to_front(1)\n",
    "        linked_list.delete_node(node2)\n",
    "        assert_equal(linked_list.get_all_data(), [1, 3, 1])\n",
    "        \n",
    "        print('Success: test_delete_node')\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    test = Test()\n",
    "    test.test_delete_node()"
     ]
    }
   ],
   "metadata": {
    "kernelspec": {
keep keep keep keep replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace keep keep keep keep keep
 Reworked notebook: Added more detail to constraints and test cases.  Reworked code and unit test. 
linked-lists/delete-mid.ipynb