From 90f75050189d3ae3de7ce8846ec152c7624a502d Mon Sep 17 00:00:00 2001 From: Donne Martin Date: Sun, 12 Jun 2016 23:27:36 -0400 Subject: [PATCH] Polish kth to last element challenge and solution Update algorithm discussion and solution. --- .../kth_to_last_elem_challenge.ipynb | 10 ++-- .../kth_to_last_elem_solution.ipynb | 49 +++++++++---------- 2 files changed, 28 insertions(+), 31 deletions(-) diff --git a/linked_lists/kth_to_last_elem/kth_to_last_elem_challenge.ipynb b/linked_lists/kth_to_last_elem/kth_to_last_elem_challenge.ipynb index 2d8d398..071a87c 100644 --- a/linked_lists/kth_to_last_elem/kth_to_last_elem_challenge.ipynb +++ b/linked_lists/kth_to_last_elem/kth_to_last_elem_challenge.ipynb @@ -175,21 +175,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.5.0" } }, "nbformat": 4, diff --git a/linked_lists/kth_to_last_elem/kth_to_last_elem_solution.ipynb b/linked_lists/kth_to_last_elem/kth_to_last_elem_solution.ipynb index 57b05b6..e5a2774 100644 --- a/linked_lists/kth_to_last_elem/kth_to_last_elem_solution.ipynb +++ b/linked_lists/kth_to_last_elem/kth_to_last_elem_solution.ipynb @@ -63,10 +63,10 @@ "source": [ "## Algorithm\n", "\n", - "* Setup two pointers, current and previous\n", - "* Give current a headstart, incrementing it once if k = 1, twice if k = 2, ...\n", - "* Increment both pointers until current reaches the end\n", - "* Return the value of previous\n", + "* Setup two pointers, fast and slow\n", + "* Give fast a headstart, incrementing it once if k = 1, twice if k = 2, ...\n", + "* Increment both pointers until fast reaches the end\n", + "* Return the value of slow\n", "\n", "Complexity:\n", "* Time: O(n)\n", @@ -103,26 +103,23 @@ "\n", " def kth_to_last_elem(self, k):\n", " if self.head is None:\n", - " return\n", - " if k >= len(self):\n", - " return\n", - " curr = self.head\n", - " prev = self.head\n", - " counter = 0\n", + " return None\n", + " fast = self.head\n", + " slow = self.head\n", "\n", - " # Give current a headstart, incrementing it\n", + " # Give fast a headstart, incrementing it\n", " # once for k = 1, twice for k = 2, etc\n", - " while counter < k:\n", - " curr = curr.next\n", - " counter += 1\n", - " if curr is None:\n", - " return\n", + " for _ in range(k):\n", + " fast = fast.next\n", + " # If k >= num elements, return None\n", + " if fast is None:\n", + " return None\n", "\n", - " # Increment both pointers until current reaches the end\n", - " while curr.next is not None:\n", - " curr = curr.next\n", - " prev = prev.next\n", - " return prev.data" + " # Increment both pointers until fast reaches the end\n", + " while fast.next is not None:\n", + " fast = fast.next\n", + " slow = slow.next\n", + " return slow.data" ] }, { @@ -212,21 +209,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.5.0" } }, "nbformat": 4,