DSA Home
Getting Started
A Simple Algorithm
Prerequisites
Foundations
DSA Arrays
Bubble Sort
Selection Sort
Insertion Sort
Quicksort
Counting Sort
Radix Sort
Merge Sort
Linear Search
Binary Search
Linked List
Linked Lists in Memory
Linked Lists Types
Linked Lists Operations
DSA Stacks
DSA Queue
DSA Hash Tables
DSA Hash Sets
DSA Hash Maps
DSA Trees
Binary Trees
Pre-order Traversal of Binary Trees
DSA In-order Traversal
DSA Post-order Traversal
DSA Array Implementation
DSA Binary Search Trees
DSA AVL Trees
DSA Graphs
Linked List – A Complete Guide (GoNimbus DSA Tutorial)
🔹 What is a Linked List?
A Linked List is a linear data structure where elements (called nodes) are connected using pointers.
Unlike arrays, the data elements in a linked list are not stored in contiguous memory locations. Each node contains:
- Data → the actual value
- Next pointer → reference (link) to the next node in the list
[10 | *] → [20 | *] → [30 | *] → NULL
Here, each box represents a node, and NULL indicates the end of the list.
Linked List Visualizer – GoNimbus DSA
Build and visualize a Linked List interactively! Insert, delete, and traverse nodes to see how pointers link elements dynamically in memory.
List is empty
💡 Meaning of Traverse in Simple Words
To traverse a linked list (or array, tree, graph, etc.) means:
“Go through each element in order, from start to end (or in a defined sequence), to perform some operation — like printing, searching, or modifying.”
🧱 Example: Traversing a Linked List
Suppose we have this linked list:10 → 20 → 30 → NULL
Traversing it means:
- Start at the head node (
10) - Move to the next node (
20) - Then to the next node (
30) - Stop when you reach
NULL(end of the list)
During traversal, you can:
- Print each value
- Count nodes
- Search for a specific value
🧮 Example in Code (Pseudo-code)
current = head
while current is not NULL:
print(current.value)
current = current.next
This code “traverses” the list by visiting each node once.
🚀 In the GoNimbus Visualizer
When you click Traverse,
the animation highlights each node one by one — showing how a program would visit all nodes sequentially.
Linked List
A Linked List is a sequence of nodes where each node contains data and a pointer to the next node.
How Linked List Search Works
A Linked List is made of nodes connected by pointers. Each node contains a value and a reference to the next node.
- Blue node: default state.
- Red node: currently being checked.
- Green node: the target value has been found.
The Target input lets you choose the number to search for. Unlike arrays, Linked Lists require sequential access — the algorithm must traverse node by node until the target is found or the list ends.
🔹 Why Linked List?
In arrays, inserting or deleting an element at any position requires shifting elements, which is time-consuming.
Linked lists solve this problem by dynamically linking nodes.
| Operation | Array | Linked List |
|---|---|---|
| Insertion (at beginning) | O(n) | O(1) |
| Deletion (at beginning) | O(n) | O(1) |
| Random Access | O(1) | O(n) |
| Memory Usage | Fixed | Dynamic |
🔹 Types of Linked Lists
- Singly Linked List
➤ Each node links to the next node only.
Example:10 → 20 → 30 → NULL - Doubly Linked List
➤ Each node links to both the previous and next nodes.
Example:NULL ← 10 ⇄ 20 ⇄ 30 → NULL - Circular Linked List
➤ The last node points back to the first node, forming a circle.
Example:10 → 20 → 30 → (back to 10)
🔹 Basic Operations on Linked List
Let’s explore some common linked list operations:
1. Insertion
- At the beginning
- At the end
- After a given node
// GoNimbus Example – Insert at the beginning
type Node struct {
data int
next *Node
}
func insertAtBeginning(head **Node, data int) {
newNode := &Node{data: data}
newNode.next = *head
*head = newNode
}
2. Traversal
func traverse(head *Node) {
for head != nil {
fmt.Printf("%d → ", head.data)
head = head.next
}
fmt.Println("NULL")
}
3. Deletion
func deleteNode(head **Node, key int) {
temp := *head
if temp != nil && temp.data == key {
*head = temp.next
return
}
for temp != nil && temp.next.data != key {
temp = temp.next
}
if temp != nil {
temp.next = temp.next.next
}
}
🔹 Advantages
✅ Dynamic memory allocation
✅ Efficient insertion/deletion
✅ Flexible size
🔹 Disadvantages
❌ No random access (must traverse nodes)
❌ Extra memory for storing pointers
🔹 Real-World Applications
- Undo/Redo operations in editors
- Browser history (previous/next pages)
- Music playlists
- Memory management systems
🧠 Key Takeaways
- A Linked List is a dynamic data structure made of nodes.
- Ideal for frequent insertions and deletions.
- Variants like doubly and circular linked lists improve traversal flexibility.
- Understanding linked lists is essential before learning Stacks, Queues, and Trees.