Linked Lists — Complete Guide: All Patterns & Problem Index

Sanjeev SharmaSanjeev Sharma
5 min read

Advertisement

Linked Lists — Complete Pattern Guide

Problems 206–250 · 45 posts · Easy × 10, Medium × 25, Hard × 10


Core Patterns

#PatternKey IdeaProblems
1Reversalprev/curr/next pointer danceReverse List, Reverse K-Group
2Two Pointers (Fast/Slow)Floyd's tortoise & hareCycle Detection, Middle, Nth from End
3MergeCompare heads, link smallerMerge Two/K Sorted Lists
4Dummy HeadAvoid edge cases at headRemove Nth, Partition
5In-Place ManipulationRewire pointers without extra spaceOdd-Even, Rotate
6Clone with ExtraHashMap or interleave trickCopy List with Random Pointer
7DesignSentinel nodes + O(1) opsLRU, LFU, Flatten

Templates

Reverse a Linked List

def reverse(head):
    prev = None
    curr = head
    while curr:
        nxt = curr.next
        curr.next = prev
        prev = curr
        curr = nxt
    return prev

Fast / Slow Pointer

def find_middle(head):
    slow = fast = head
    while fast and fast.next:
        slow = slow.next
        fast = fast.next.next
    return slow  # middle node

Detect Cycle

def has_cycle(head):
    slow = fast = head
    while fast and fast.next:
        slow = slow.next
        fast = fast.next.next
        if slow == fast: return True
    return False

Merge Two Sorted Lists

def merge(l1, l2):
    dummy = ListNode(0)
    cur = dummy
    while l1 and 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 or l2
    return dummy.next

Dummy Head Pattern

def remove_nth(head, n):
    dummy = ListNode(0, head)
    fast = slow = dummy
    for _ in range(n+1): fast = fast.next
    while fast:
        fast = fast.next
        slow = slow.next
    slow.next = slow.next.next
    return dummy.next

Problem Index — Linked Lists

🟢 Easy (206–215)

#ProblemPattern
206Reverse Linked ListReversal
207Middle of Linked ListFast/Slow
208Linked List CycleFast/Slow
209Merge Two Sorted ListsMerge
210Palindrome Linked ListFast/Slow + Reverse
211Remove Duplicates from Sorted ListPointer Walk
212Delete Node in Linked ListCopy + Delete
213Intersection of Two Linked ListsTwo Pointers
214Convert Binary Number to IntegerBit Shift
215Remove Linked List ElementsDummy Head

🟡 Medium (216–240)

#ProblemPattern
216Remove Nth Node From EndDummy + Fast/Slow
217Swap Nodes in PairsIn-Place
218Odd Even Linked ListIn-Place
219Rotate ListFind Length + Reconnect
220Reorder ListFast/Slow + Reverse + Merge
221Add Two NumbersSimulate Carry
222Add Two Numbers IIStack
223Partition ListTwo Dummy Heads
224Sort ListMerge Sort
225Delete Duplicates II (all dups)Dummy Head
226Copy List with Random PointerHashMap / Interleave
227Flatten Multilevel Doubly Linked ListDFS / Stack
228Insert into Sorted Circular ListPointer Scan
229Split Linked List in PartsEven Split
230Reverse Linked List IIReversal
231Swapping NodesTwo Pointers
232Remove Zero-Sum SublistsPrefix Sum Map
233Linked List Cycle IIFloyd's
234Find the Duplicate NumberFloyd's on Array
235Next Greater NodeMonotonic Stack
236Design Linked ListSentinel Design
237Reverse Nodes in Even-Length GroupsGroup Reversal
238Delete the Middle NodeFast/Slow
239Maximum Twin SumFast/Slow + Reverse
240Merge Nodes In Between ZerosPointer Walk

🔴 Hard (241–250)

#ProblemPattern
241Reverse Nodes in K-GroupRecursive Reversal
242Merge K Sorted ListsHeap / Divide & Conquer
243LRU Cache (LL impl)DLL + HashMap
244Sort List (O(n log n) space O(1))Bottom-Up Merge Sort
245Flatten Binary Tree to Linked ListMorris / DFS
246Convert Sorted List to BSTFast/Slow + Recursion
247Linked List ComponentsHashSet
248Insert into a Sorted Circular ListEdge Cases
249All O'one (LL backbone)DLL Buckets
250Linked Lists Master RecapCheatsheet

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro