Skip to main content

๐Ÿ”— Linked List

One-line summary: A dynamic chain of nodes โ€” O(1) insert/delete at known position, O(n) access by index. Master reversal, cycle detection, and merge patterns.


Conceptโ€‹

Each node: val + next pointer (singly), or prev+next (doubly).

Types: Singly, Doubly, Circular.


Diagramโ€‹

Linked List Structure Linked List GIF


Time & Space Complexityโ€‹

OperationTimeSpace
Access by indexO(n)O(1)
Insert/Delete at headO(1)O(1)
ReverseO(n)O(1)
Cycle detection (Floyd's)O(n)O(1)
Find middleO(n)O(1)

Common Patternsโ€‹

Reverse (Iterative)โ€‹

function reverseList(head) {
let prev = null,
curr = head;
while (curr) {
const next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}

Cycle Detection (Floyd's)โ€‹

function hasCycle(head) {
let slow = head,
fast = head;
while (fast && fast.next) {
slow = slow.next;
fast = fast.next.next;
if (slow === fast) return true;
}
return false;
}

Find Middleโ€‹

function findMiddle(head) {
let slow = head,
fast = head;
while (fast && fast.next) {
slow = slow.next;
fast = fast.next.next;
}
return slow;
}

Merge Two Sorted Listsโ€‹

function mergeTwoLists(l1, l2) {
const dummy = { next: null };
let cur = dummy;
while (l1 && l2) {
if (l1.val <= l2.val) {
cur.next = l1;
l1 = l1.next;
} else {
cur.next = l2;
l2 = l2.next;
}
cur = cur.next;
}
cur.next = l1 || l2;
return dummy.next;
}

Pitfallsโ€‹

  • Losing reference to next before reassigning โ€” store it first
  • Forgetting to update tail.next = null after reversal
  • Off-by-one in middle finding: even-length list has two middles

Practice Problemsโ€‹

ProblemDifficultySolution
LC 206 โ€” Reverse Linked ListEasy
LC 160 โ€” Intersection of Two Linked ListsEasy
LC 141 โ€” Linked List CycleEasy
LC 876 โ€” Middle of the Linked ListEasy
LC 19 โ€” Remove Nth Node From EndMedium
LC 143 โ€” Reorder ListMedium
LC 234 โ€” Palindrome Linked ListEasy
LC 25 โ€” Reverse Nodes in k-GroupHard
LC 138 โ€” Copy List with Random PointerMedium
CC โ€” Linked List Operations (LISTOPS)Medium
LC 2 โ€” Add Two NumbersMedium
LC 21 โ€” Merge Two Sorted ListsEasy
LC 83 โ€” Remove Duplicates from Sorted ListEasy
LC 203 โ€” Remove Linked List ElementsEasy
LC 237 โ€” Delete Node in a Linked ListEasy
LC 1290 โ€” Convert Binary Number in a Linked List to IntegerEasy
LC 1474 โ€” Delete N Nodes After M Nodes of a Linked ListEasy
LC 24 โ€” Swap Nodes in PairsMedium
LC 61 โ€” Rotate ListMedium
LC 82 โ€” Remove Duplicates from Sorted List IIMedium
LC 86 โ€” Partition ListMedium
LC 92 โ€” Reverse Linked List IIMedium
LC 142 โ€” Linked List Cycle IIMedium
LC 147 โ€” Insertion Sort ListMedium
LC 148 โ€” Sort ListMedium
LC 328 โ€” Odd Even Linked ListMedium
LC 445 โ€” Add Two Numbers IIMedium
LC 725 โ€” Split Linked List in PartsMedium
LC 817 โ€” Linked List ComponentsMedium
LC 1019 โ€” Next Greater Node In Linked ListMedium
LC 1367 โ€” Linked List in Binary TreeMedium
LC 1721 โ€” Swapping Nodes in a Linked ListMedium
CC โ€” Linked List Operations (LISTOPS)Medium
CC โ€” Reverse Linked List (REVLIST)Medium
CC โ€” Merge Sorted Lists (MERGESORT)Medium
LC 23 โ€” Merge k Sorted ListsHard
LC 146 โ€” LRU CacheHard
LC 460 โ€” LFU CacheHard
LC 1206 โ€” Design SkiplistHard
CC โ€” Advanced Linked List (ADVLIST)Hard

  • Two Pointers โ€” fast/slow is a linked-list technique
  • Stack โ€” LRU = doubly linked list + hash map
  • Trees โ€” tree nodes are linked nodes with more pointers

โ† Back to Home ยท ยฉ sparshjaswal