Back to Articles

January 21, 2025
Python
Data Structures
Programming
Linked Lists

A Beginner's Guide to Python Linked Lists

When exploring data structures in Python, you’ll likely come across linked lists. Although Python doesn’t natively provide linked list functionality like it does for arrays, understanding this structure is key to mastering programming concepts and tackling specific problems efficiently. This guide breaks down what linked lists are, why they’re valuable, and how to implement them in Python step by step.


What Are Linked Lists?

A linked list is a sequential data structure where elements are stored in units called nodes. Each node consists of two components:

  1. Data: The value the node holds.
  2. Pointer (or Reference): A reference to the next node in the sequence.

Unlike arrays, linked lists don’t store their elements in adjacent memory locations, allowing for more flexibility in memory usage.


Types of Linked Lists

Linked lists come in three primary forms:

  1. Singly Linked List: Each node links to the next one, with the last node pointing to None.
  2. Doubly Linked List: Nodes contain references to both their predecessor and successor.
  3. Circular Linked List: The last node connects back to the first, forming a loop.

For simplicity, this guide focuses on singly linked lists.


Why Use Linked Lists?

  • Dynamic Size: Unlike arrays, which have a fixed size, linked lists can grow or shrink at runtime.
  • Efficient Insertions and Deletions: Adding or removing elements doesn’t require shifting data, as it does with arrays.
  • Flexible Memory Usage: Since nodes aren’t stored contiguously, linked lists are well-suited for unpredictable memory allocation.

However, linked lists have a drawback: accessing elements is slower because you must traverse the nodes sequentially.


How to Implement a Singly Linked List in Python

Here’s a step-by-step guide to building and using a singly linked list in Python.

1. Create a Node Class

A node holds data and a pointer to the next node.

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

2. Create a Linked List Class

The LinkedList class manages the linked list and handles tasks like adding, displaying, and removing elements.

class LinkedList:
    def __init__(self):
        self.head = None

3. Add Nodes to the Linked List

Define a method to append elements to the linked list.

    def append(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            return
        current = self.head
        while current.next:
            current = current.next
        current.next = new_node

4. Display the Linked List

Iterate through the list to print each element.

    def display(self):
        current = self.head
        while current:
            print(current.data, end=" -> ")
            current = current.next
        print("None")

5. Test Your Linked List

# Create a linked list and add elements
ll = LinkedList()
ll.append(10)
ll.append(20)
ll.append(30)

# Display the linked list
ll.display()  # Output: 10 -> 20 -> 30 -> None

Common Linked List Operations

1. Inserting a Node at the Beginning

    def insert_at_beginning(self, data):
        new_node = Node(data)
        new_node.next = self.head
        self.head = new_node

2. Deleting a Node

To remove a node based on its value, locate it, update pointers, and delete it.

    def delete(self, key):
        current = self.head

        # If the head node contains the key
        if current and current.data == key:
            self.head = current.next
            return

        # Search for the key
        prev = None
        while current and current.data != key:
            prev = current
            current = current.next

        if current:
            prev.next = current.next

Linked Lists vs. Python Lists

While Python’s built-in list is optimized for most tasks, learning linked lists improves your understanding of algorithms and memory management. Use Python lists for everyday programming needs, but turn to linked lists for more dynamic or memory-specific operations.


Conclusion

Linked lists are a foundational data structure that every programmer should grasp. Though Python doesn’t have a built-in linked list, you can easily implement one using classes. By mastering linked lists, you’ll deepen your understanding of data structures, setting the stage for tackling advanced concepts like trees and graphs.

If you found this guide useful, consider sharing it or saving it for later! Happy coding!