Launch your tech mastery with us—your coding journey starts now!
Course Content
Data Structure

Linked List Operations

There are various linked list operations that allow us to perform different actions on linked lists. For example, the insertion operation adds a new element to the linked list.

  1. Traversal: Visiting every node to print or process data.
  2. Insertion: Adding a new node (at the beginning, end, or specific position).
  3. Deletion: Removing an existing node and updating the links.
  4. Search: Finding a node with a specific value.

Code Implementation: Singly Linked List

This code follows the node structure seen in your Stack/Queue tutorials  but expands it for general list operations.

JavaPythonCC++

// 1. Define the Node Class
class Node {
    int data;
    Node next;

    // Constructor
    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}

// 2. Define the Linked List Class
public class LinkedList {
    private Node head; // The entry point to the list

    // Operation: Insert at the End
    public void append(int data) {
        Node newNode = new Node(data);

        // Case 1: List is empty
        if (head == null) {
            head = newNode;
            return;
        }

        // Case 2: Traverse to the end
        Node current = head;
        while (current.next != null) {
            current = current.next;
        }
       
        // Link the last node to the new node
        current.next = newNode;
        System.out.println("Inserted: " + data);
    }

    // Operation: Insert at the Beginning (Head)
    public void push(int data) {
        Node newNode = new Node(data);
        newNode.next = head; // Point new node to current head
        head = newNode;      // Update head to be the new node
        System.out.println("Inserted at head: " + data);
    }

    // Operation: Delete by Value
    public void delete(int key) {
        Node current = head;
        Node prev = null;

        // Case 1: Head holds the key
        if (current != null && current.data == key) {
            head = current.next; // Move head forward
            System.out.println("Deleted: " + key);
            return;
        }

        // Case 2: Search for the key
        while (current != null && current.data != key) {
            prev = current;
            current = current.next;
        }

        // Case 3: Key was not found
        if (current == null) {
            System.out.println("Element not found");
            return;
        }

        // Unlink the node
        prev.next = current.next;
        System.out.println("Deleted: " + key);
    }

    // Operation: Display (Traversal)
    public void display() {
        Node current = head;
        System.out.print("List: ");
        while (current != null) {
            System.out.print(current.data + " -> ");
            current = current.next;
        }
        System.out.println("null");
    }

    // Main Method to Run Code
    public static void main(String[] args) {
        LinkedList list = new LinkedList();

        list.append(10);
        list.append(20);
        list.append(30);
        list.display();

        list.push(5);
        list.display();

        list.delete(20);
        list.display();
    }
}

# 1. Define the Node Class
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None


# 2. Define the Linked List Class
class LinkedList:

    def __init__(self):
        self.head = None


    # Operation: Insert at the End
    def append(self, data):
        newNode = Node(data)

        # Case 1: List is empty
        if self.head is None:
            self.head = newNode
            return

        # Case 2: Traverse to the end
        current = self.head
        while current.next is not None:
            current = current.next

        current.next = newNode
        print("Inserted:", data)


    # Operation: Insert at the Beginning
    def push(self, data):
        newNode = Node(data)
        newNode.next = self.head
        self.head = newNode
        print("Inserted at head:", data)


    # Operation: Delete by Value
    def delete(self, key):
        current = self.head
        prev = None

        if current and current.data == key:
            self.head = current.next
            print("Deleted:", key)
            return

        while current and current.data != key:
            prev = current
            current = current.next

        if current is None:
            print("Element not found")
            return

        prev.next = current.next
        print("Deleted:", key)


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


# Main Execution
list = LinkedList()

list.append(10)
list.append(20)
list.append(30)
list.display()

list.push(5)
list.display()

list.delete(20)
list.display()

#include <stdio.h>
#include <stdlib.h>

// 1. Define Node
struct Node {
    int data;
    struct Node* next;
};

struct Node* head = NULL;


// Insert at End
void append(int data) {

    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = data;
    newNode->next = NULL;

    if (head == NULL) {
        head = newNode;
        return;
    }

    struct Node* current = head;

    while (current->next != NULL) {
        current = current->next;
    }

    current->next = newNode;
    printf("Inserted: %d\n", data);
}


// Insert at Beginning
void push(int data) {

    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = data;

    newNode->next = head;
    head = newNode;

    printf("Inserted at head: %d\n", data);
}


// Delete by value
void deleteNode(int key) {

    struct Node* current = head;
    struct Node* prev = NULL;

    if (current != NULL && current->data == key) {
        head = current->next;
        printf("Deleted: %d\n", key);
        return;
    }

    while (current != NULL && current->data != key) {
        prev = current;
        current = current->next;
    }

    if (current == NULL) {
        printf("Element not found\n");
        return;
    }

    prev->next = current->next;
    printf("Deleted: %d\n", key);
}


// Display list
void display() {

    struct Node* current = head;

    printf("List: ");

    while (current != NULL) {
        printf("%d -> ", current->data);
        current = current->next;
    }

    printf("null\n");
}


int main() {

    append(10);
    append(20);
    append(30);
    display();

    push(5);
    display();

    deleteNode(20);
    display();

    return 0;
}

#include <iostream>
using namespace std;

// 1. Define Node
class Node {
public:
    int data;
    Node* next;

    Node(int data) {
        this->data = data;
        this->next = NULL;
    }
};


// 2. Define Linked List
class LinkedList {

private:
    Node* head;

public:
    LinkedList() {
        head = NULL;
    }


    // Insert at End
    void append(int data) {

        Node* newNode = new Node(data);

        if (head == NULL) {
            head = newNode;
            return;
        }

        Node* current = head;

        while (current->next != NULL) {
            current = current->next;
        }

        current->next = newNode;
        cout << "Inserted: " << data << endl;
    }


    // Insert at Beginning
    void push(int data) {

        Node* newNode = new Node(data);

        newNode->next = head;
        head = newNode;

        cout << "Inserted at head: " << data << endl;
    }


    // Delete by value
    void deleteNode(int key) {

        Node* current = head;
        Node* prev = NULL;

        if (current != NULL && current->data == key) {
            head = current->next;
            cout << "Deleted: " << key << endl;
            return;
        }

        while (current != NULL && current->data != key) {
            prev = current;
            current = current->next;
        }

        if (current == NULL) {
            cout << "Element not found" << endl;
            return;
        }

        prev->next = current->next;
        cout << "Deleted: " << key << endl;
    }


    // Display list
    void display() {

        Node* current = head;

        cout << "List: ";

        while (current != NULL) {
            cout << current->data << " -> ";
            current = current->next;
        }

        cout << "null" << endl;
    }
};


int main() {

    LinkedList list;

    list.append(10);
    list.append(20);
    list.append(30);
    list.display();

    list.push(5);
    list.display();

    list.deleteNode(20);
    list.display();

    return 0;
}