Design Linked List

Medium JavaDesignLinked List

Problem

Design a singly linked list MyLinkedList with get(int index), addAtHead(int val), addAtTail(int val), addAtIndex(int index, int val), and deleteAtIndex(int index).

Example 1 Input: addAtHead(1); addAtTail(3); get(0) Output: 1

Constraints

Approach — Linked List

This is a Linked List problem. The idea: rework the list with careful pointer manipulation — often a dummy head and fast/slow pointers — in a single pass. Work through the reference code below line by line, then re-derive it yourself in the editor — that's how the pattern sticks.

Complexity: O(n) time, O(1) space.

Solution code

Python

class MyLinkedList:

    def __init__(self):
        self.dummy = [None, None]  # [value, next]
        self.size = 0

    def get(self, index):
        if index < 0 or index >= self.size:
            return -1
        cur = self.dummy[1]
        for _ in range(index):
            cur = cur[1]
        return cur[0]

    def addAtHead(self, val):
        self.addAtIndex(0, val)

    def addAtTail(self, val):
        self.addAtIndex(self.size, val)

    def addAtIndex(self, index, val):
        if index < 0 or index > self.size:
            return
        prev = self.dummy
        for _ in range(index):
            prev = prev[1]
        prev[1] = [val, prev[1]]
        self.size += 1

    def deleteAtIndex(self, index):
        if index < 0 or index >= self.size:
            return
        prev = self.dummy
        for _ in range(index):
            prev = prev[1]
        prev[1] = prev[1][1]
        self.size -= 1

Java

class MyLinkedList {
    private static class Node {
        int val; Node next;
        Node(int v) { val = v; }
    }
    private Node dummy = new Node(0);
    private int size = 0;
    public int get(int index) {
        if (index < 0 || index >= size) return -1;
        Node cur = dummy.next;
        for (int i = 0; i < index; i++) cur = cur.next;
        return cur.val;
    }
    public void addAtHead(int val) { addAtIndex(0, val); }
    public void addAtTail(int val) { addAtIndex(size, val); }
    public void addAtIndex(int index, int val) {
        if (index < 0 || index > size) return;
        Node prev = dummy;
        for (int i = 0; i < index; i++) prev = prev.next;
        Node n = new Node(val);
        n.next = prev.next;
        prev.next = n;
        size++;
    }
    public void deleteAtIndex(int index) {
        if (index < 0 || index >= size) return;
        Node prev = dummy;
        for (int i = 0; i < index; i++) prev = prev.next;
        prev.next = prev.next.next;
        size--;
    }
}

class Solution {}

Practice it

Reading a solution isn't the same as being able to write it under pressure. Open this problem in the in-browser editor, hide the solution, and solve it from scratch — your code runs against real test cases instantly.

Solve Design Linked List interactively → ← All solutions