     "metadata": {},
     "source": [
      "## Algorithm\n",
      "\n",
      "* Check for edge cases above, returning None for errors\n",
      "* Setup two pointers, current and previous\n",
      "* Give current a headstart, incrementing it once for k = 1, twice for k = 2, etc\n",
      "* Increment both pointers until current reaches the end\n",
      "* Return the value of previous\n",
      "\n",
 
</s> remove     "    * No"
 </s> add     "    * No\n",
    "* Can we assume we already have a linked list class that can be used for this problem?\n",
    "    * Yes" </s> remove     "* Is k an integer?\n",
 </s> add     "*Problem statements are often intentionally ambiguous.  Identifying constraints and stating assumptions can help to ensure you code the intended solution.*\n",
    "\n",
    "* Can we assume k is a valid integer?\n", </s> remove     "## Clarifying Questions\n",
 </s> add     "## Constraints and Assumptions\n",
     "metadata": {},
     "source": [
      "## Algorithm\n",
      "\n",

      "* Setup two pointers, current and previous\n",
      "* Give current a headstart, incrementing it once for k = 1, twice for k = 2, etc\n",
      "* Increment both pointers until current reaches the end\n",
      "* Return the value of previous\n",
      "\n",
keep keep keep keep replace keep keep keep keep keep
 Reworked notebook: Added more detail to constraints and test cases.  Reworked code and unit test. 
linked-lists/kth-to-last-elem.ipynb