Bird
Raised Fist0
DSA Pythonprogramming~10 mins

Insert at Beginning Head Insert in DSA Python - Execution Trace

Choose your learning style10 modes available
Concept Flow - Insert at Beginning Head Insert
Create new node
↓
New node.next = head
↓
head = new node
↓
Done
Insert a new node by making it point to the current head, then update head to this new node.
Execution Sample
DSA Python
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

head = None
# Insert 10 at beginning
new_node = Node(10)
new_node.next = head
head = new_node
This code inserts a new node with value 10 at the beginning of an empty linked list.
Execution Table
StepOperationNodes in ListPointer ChangesVisual State
1Start with empty listNonehead = NoneList is empty
2Create new node with data=10Node(10)new_node created, next=Noneā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ data:10│ │ next:āˆ… │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
3Set new_node.next = head (None)Node(10)new_node.next = Noneā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ data:10│ │ next:āˆ… │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
4Update head = new_nodeNode(10)head → new_nodeā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ data:10│ │ next:āˆ… │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ head
5Insert 20 at beginningNode(20) → Node(10)new_node created, new_node.next = head, head = new_nodeBEFORE: ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ data:10│ │ data:20│ │ next:āˆ… │ │ next:āˆ… │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ head Step 1: new_node.next = head Step 2: head = new_node AFTER: ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ data:20│ ──→ │ data:10│ │ next:──┼──→ │ next:āˆ… │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ head
6Insert 30 at beginningNode(30) → Node(20) → Node(10)new_node created, new_node.next = head, head = new_nodeBEFORE: ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ data:20│ ──→ │ data:10│ │ data:30│ │ next:──┼──→ │ next:āˆ… │ │ next:āˆ… │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ head Step 1: new_node.next = head Step 2: head = new_node AFTER: ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ data:30│ ──→ │ data:20│ ──→ │ data:10│ │ next:──┼──→ │ next:──┼──→ │ next:āˆ… │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ head
7End of insertionsNode(30) → Node(20) → Node(10)No changesFinal list: ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ data:30│ ──→ │ data:20│ ──→ │ data:10│ │ next:──┼──→ │ next:──┼──→ │ next:āˆ… │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ head
šŸ’” No more insertions, list head points to newest node.
Variable Tracker
VariableStartAfter Step 2After Step 4After Step 5After Step 6Final
headNoneNoneNode(10)Node(20)Node(30)Node(30)
new_nodeNoneNode(10)Node(10)Node(20)Node(30)Node(30)
Key Moments - 3 Insights
Why do we set new_node.next = head before updating head?
Because new_node.next must point to the old first node to keep the list connected. See execution_table step 3 and 4 where new_node.next is set before head changes.
What happens if the list is empty when inserting?
The new node's next points to None (empty list), and head points to the new node. See execution_table steps 1 to 4 for empty list insertion.
Why does head always point to the newest inserted node?
Because we update head = new_node after linking new_node.next to old head. This makes the new node the first in the list. See execution_table steps 4, 5, and 6.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 5, what does head point to?
ANode with data 20
BNode with data 10
CNode with data 30
DNone
šŸ’” Hint
Check the 'Pointer Changes' and 'Visual State' columns at step 5.
At which step does the list first contain more than one node?
AStep 3
BStep 4
CStep 5
DStep 6
šŸ’” Hint
Look at the 'Nodes in List' column to see when multiple nodes appear.
If we skip setting new_node.next = head, what happens to the list?
AList becomes empty
BNew node points to None, old list lost
CHead points to old first node
DNo change in list
šŸ’” Hint
Refer to the pointer changes in steps 3 and 4.
Concept Snapshot
Insert at Beginning (Head Insert):
- Create new node
- Set new_node.next = head
- Update head = new_node
- New node becomes first element
- Works for empty and non-empty lists
Full Transcript
To insert at the beginning of a linked list, first create a new node. Then, link this new node's next pointer to the current head of the list. Finally, update the head pointer to this new node. This makes the new node the first element. If the list was empty, the new node's next points to None. Each insertion updates head to the newest node, preserving the list order. The execution table shows step-by-step how nodes and pointers change, and the variable tracker follows head and new_node references. Key moments clarify why pointer updates happen in this order and what occurs when the list is empty.

Practice

(1/5)
1. What does the operation insert at beginning do in a linked list?
easy
A. Deletes the first node of the list
B. Adds a new node at the start of the list
C. Adds a new node at the end of the list
D. Deletes the last node of the list

Solution

  1. Step 1: Understand the meaning of 'insert at beginning'

    Inserting at the beginning means adding a new element before the current first element.
  2. Step 2: Identify the effect on the linked list

    The new node becomes the new head, pushing the old head to second position.
  3. Final Answer:

    Adds a new node at the start of the list -> Option B
  4. Quick Check:

    Insert at beginning = Add new head [OK]
Hint: Insert at beginning means new head node [OK]
Common Mistakes:
  • Confusing insert at beginning with insert at end
  • Thinking it deletes nodes instead of adding
  • Assuming it changes the last node
2. Which of the following is the correct syntax to insert a new node at the beginning of a singly linked list in Python?
easy
A. new_node = head.next; head = new_node
B. head.next = new_node; new_node = head
C. head = head.next; new_node = head
D. new_node.next = head; head = new_node

Solution

  1. Step 1: Understand pointer assignment for head insert

    To insert at beginning, new_node's next points to current head.
  2. Step 2: Update head to new_node

    Then head is updated to new_node to make it the first node.
  3. Final Answer:

    new_node.next = head; head = new_node -> Option D
  4. Quick Check:

    Set new_node.next to head, then head = new_node [OK]
Hint: Link new node to head, then update head [OK]
Common Mistakes:
  • Assigning head.next instead of new_node.next
  • Not updating head to new_node
  • Swapping assignment order incorrectly
3. What will be the linked list after executing the following code?
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

head = Node(10)
new_node = Node(20)
new_node.next = head
head = new_node
medium
A. 20 -> 10 -> null
B. 10 -> 20 -> null
C. 20 -> null
D. 10 -> null

Solution

  1. Step 1: Create initial list with head node 10

    Initially, head points to node with data 10 and next is None.
  2. Step 2: Insert new_node with data 20 at beginning

    new_node.next points to head (node 10), then head updated to new_node.
  3. Final Answer:

    20 -> 10 -> null -> Option A
  4. Quick Check:

    New node 20 becomes head, points to 10 [OK]
Hint: New node points to old head, then becomes head [OK]
Common Mistakes:
  • Thinking new_node is added at end
  • Not updating head to new_node
  • Confusing node data order
4. Identify the error in this code snippet that tries to insert a node at the beginning of a linked list:
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

head = Node(5)
new_node = Node(15)
head = new_node
new_node.next = head
medium
A. The order of assignments is wrong; new_node.next should be set before head update
B. Node class is missing a data attribute
C. head should be None initially
D. new_node should not be created before head

Solution

  1. Step 1: Analyze assignment order

    head is set to new_node first, then new_node.next is set to head (which is now new_node itself).
  2. Step 2: Identify logical error

    This causes new_node.next to point to itself, losing original list starting at old head.
  3. Final Answer:

    The order of assignments is wrong; new_node.next should be set before head update -> Option A
  4. Quick Check:

    Set new_node.next before head = new_node [OK]
Hint: Set new_node.next before updating head [OK]
Common Mistakes:
  • Updating head before linking new_node.next
  • Confusing attribute initialization
  • Assuming head must be None initially
5. Given a linked list with nodes containing values [30, 20, 10] (30 is head), which sequence of operations correctly inserts a new node with value 40 at the beginning and results in the list 40 -> 30 -> 20 -> 10 -> null?
hard
A. new_node = Node(40); new_node.next = None; head = new_node
B. new_node = Node(40); head.next = new_node; head = new_node
C. new_node = Node(40); new_node.next = head; head = new_node
D. new_node = Node(40); head = new_node; new_node.next = head

Solution

  1. Step 1: Create new node with value 40

    new_node is created with data 40 and next initially None.
  2. Step 2: Link new_node to current head

    Set new_node.next to current head (node 30) to keep existing list after new node.
  3. Step 3: Update head to new_node

    Head pointer is updated to new_node, making it the first node.
  4. Final Answer:

    new_node = Node(40); new_node.next = head; head = new_node -> Option C
  5. Quick Check:

    Link new node to old head, then update head [OK]
Hint: Link new node to head, then update head pointer [OK]
Common Mistakes:
  • Linking head.next instead of new_node.next
  • Updating head before linking new_node.next
  • Setting new_node.next to None losing list
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard