From d260fbcff547ccb2a91d796e2f24a84bd28a0aee Mon Sep 17 00:00:00 2001 From: syedabdullahbukhari77 Date: Tue, 25 Mar 2025 07:29:23 +0500 Subject: [PATCH] Chore : Added a Linked List Diagram for better understanding --- Linked Lists/B1_Linked_List.ipynb | 183 ++++++++++++++++++++++++++- Linked Lists/Linked List Diagram.jpg | Bin 0 -> 21494 bytes 2 files changed, 182 insertions(+), 1 deletion(-) create mode 100644 Linked Lists/Linked List Diagram.jpg diff --git a/Linked Lists/B1_Linked_List.ipynb b/Linked Lists/B1_Linked_List.ipynb index 709d82c..ec82834 100644 --- a/Linked Lists/B1_Linked_List.ipynb +++ b/Linked Lists/B1_Linked_List.ipynb @@ -1,5 +1,172 @@ { "cells": [ + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "# Define Node class\n", + "class Node:\n", + " def __init__(self, value):\n", + " self.value = value\n", + " self.next = None" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "class LinkedList:\n", + " def __init__(self):\n", + " self.head = None\n", + " self.n = 0 # Keep track of length\n", + "\n", + " def __len__(self):\n", + " return self.n\n", + "\n", + " def insert_head(self, value):\n", + " new_node = Node(value)\n", + " new_node.next = self.head\n", + " self.head = new_node\n", + " self.n += 1\n", + "\n", + " def insert_tail(self, value):\n", + " new_node = Node(value)\n", + " if self.head is None:\n", + " self.head = new_node\n", + " else:\n", + " temp = self.head\n", + " while temp.next:\n", + " temp = temp.next\n", + " temp.next = new_node\n", + " self.n += 1\n", + "\n", + " def insert_at_index(self, index, value):\n", + " if index < 0 or index > self.n:\n", + " raise IndexError(\"Index out of range\")\n", + " \n", + " if index == 0:\n", + " self.insert_head(value)\n", + " return\n", + " \n", + " new_node = Node(value)\n", + " temp = self.head\n", + " for _ in range(index - 1):\n", + " temp = temp.next\n", + " new_node.next = temp.next\n", + " temp.next = new_node\n", + " self.n += 1\n", + "\n", + " def delete_node(self, value):\n", + " if self.head is None:\n", + " return\n", + " \n", + " if self.head.value == value:\n", + " self.head = self.head.next\n", + " self.n -= 1\n", + " return\n", + " \n", + " temp = self.head\n", + " while temp.next and temp.next.value != value:\n", + " temp = temp.next\n", + " \n", + " if temp.next:\n", + " temp.next = temp.next.next\n", + " self.n -= 1\n", + "\n", + " def search(self, value):\n", + " temp = self.head\n", + " index = 0\n", + " while temp:\n", + " if temp.value == value:\n", + " return index\n", + " temp = temp.next\n", + " index += 1\n", + " return -1 # Not found\n", + "\n", + " def reverse(self):\n", + " prev = None\n", + " current = self.head\n", + " while current:\n", + " next_node = current.next\n", + " current.next = prev\n", + " prev = current\n", + " current = next_node\n", + " self.head = prev\n", + "\n", + " def display(self):\n", + " temp = self.head\n", + " while temp:\n", + " print(temp.value, end=\" -> \")\n", + " temp = temp.next\n", + " print(\"None\")\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2 -> 4 -> 1 -> 3 -> None\n" + ] + } + ], + "source": [ + "L = LinkedList()\n", + "L.insert_head(1)\n", + "L.insert_head(2)\n", + "L.insert_tail(3)\n", + "L.insert_at_index(1, 4) # Insert 4 at index 1\n", + "L.display() # Expected: 2 -> 4 -> 1 -> 3 -> None" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Index of 3: 3\n", + "2 -> 1 -> 3 -> None\n" + ] + } + ], + "source": [ + "print(\"Index of 3:\", L.search(3)) # Expected: 3\n", + "L.delete_node(4)\n", + "L.display() # Expected: 2 -> 1 -> 3 -> None" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3 -> 1 -> 2 -> None\n" + ] + } + ], + "source": [ + "L.reverse()\n", + "L.display()" + ] + }, { "cell_type": "code", "execution_count": null, @@ -9,8 +176,22 @@ } ], "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, "language_info": { - "name": "python" + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" } }, "nbformat": 4, diff --git a/Linked Lists/Linked List Diagram.jpg b/Linked Lists/Linked List Diagram.jpg new file mode 100644 index 0000000000000000000000000000000000000000..49cedfc67e8c765cc1525c0a319d9d18de0db47a GIT binary patch literal 21494 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 literal 0 HcmV?d00001