Bird
Raised Fist0
DSA C#programming

Insert at End Tail Insert in DSA C#

Choose your learning style10 modes available
Mental Model
Add a new item at the very end of a chain by walking to the last item and linking the new one after it.
Analogy: Imagine a line of people holding hands. To add a new person at the end, you walk to the last person and hold their hand.
head -> 1 -> 2 -> 3 -> null
Dry Run Walkthrough
Input: list: 1 -> 2 -> 3, insert value 4 at end
Goal: Add the value 4 at the end of the list so it becomes 1 -> 2 -> 3 -> 4 -> null
Step 1: start at head node with value 1
head -> [curr->1] -> 2 -> 3 -> null
Why: We begin from the start to find the last node
Step 2: move curr to next node with value 2
head -> 1 -> [curr->2] -> 3 -> null
Why: We keep moving forward to reach the end
Step 3: move curr to next node with value 3
head -> 1 -> 2 -> [curr->3] -> null
Why: We continue until we find the last node (next is null)
Step 4: create new node with value 4 and link it after curr
head -> 1 -> 2 -> 3 -> 4 -> null
Why: Attach new node at the end to complete insertion
Result:
head -> 1 -> 2 -> 3 -> 4 -> null
Annotated Code
DSA C#
using System;

public class Node
{
    public int data;
    public Node next;

    public Node(int data)
    {
        this.data = data;
        this.next = null;
    }
}

public class LinkedList
{
    public Node head;

    public void InsertAtEnd(int value)
    {
        Node newNode = new Node(value);
        if (head == null)
        {
            head = newNode; // handle empty list
            return;
        }

        Node curr = head;
        while (curr.next != null)
        {
            curr = curr.next; // advance curr to next node
        }
        curr.next = newNode; // link new node at end
    }

    public void PrintList()
    {
        Node curr = head;
        while (curr != null)
        {
            Console.Write(curr.data);
            if (curr.next != null) Console.Write(" -> ");
            curr = curr.next;
        }
        Console.WriteLine(" -> null");
    }
}

public class Program
{
    public static void Main()
    {
        LinkedList list = new LinkedList();
        list.head = new Node(1);
        list.head.next = new Node(2);
        list.head.next.next = new Node(3);

        list.InsertAtEnd(4);
        list.PrintList();
    }
}
if (head == null) { head = newNode; // handle empty list return; }
handle empty list by setting head to new node
Node curr = head; while (curr.next != null) { curr = curr.next; // advance curr to next node }
advance curr to last node where next is null
curr.next = newNode; // link new node at end
attach new node after last node
OutputSuccess
1 -> 2 -> 3 -> 4 -> null
Complexity Analysis
Time: O(n) because we traverse all nodes once to reach the end
Space: O(1) because we only use a few pointers regardless of list size
vs Alternative: Compared to inserting at the front which is O(1), inserting at end requires traversal making it O(n)
Edge Cases
empty list
new node becomes the head of the list
DSA C#
if (head == null)
        {
            head = newNode; // handle empty list
            return;
        }
single element list
new node is linked after the single existing node
DSA C#
while (curr.next != null)
        {
            curr = curr.next; // advance curr to next node
        }
When to Use This Pattern
When you need to add an item at the end of a linked list, use tail insertion by traversing to the last node and linking the new node.
Common Mistakes
Mistake: Not handling the empty list case, causing null reference errors.
Fix: Check if head is null and set head to new node before traversal.
Mistake: Linking new node before reaching the last node, breaking the list.
Fix: Traverse until curr.next is null before linking the new node.
Summary
Adds a new node at the end of a linked list.
Use when you want to append data preserving the existing order.
The key is to find the last node by moving forward until next is null, then link the new node.

Practice

(1/5)
1. What does the InsertAtEnd method do in a singly linked list?
easy
A. Adds a new node at the end (tail) of the list
B. Removes the first node of the list
C. Inserts a new node at the beginning (head) of the list
D. Deletes the last node of the list

Solution

  1. Step 1: Understand the method name

    The method name InsertAtEnd suggests adding a node at the end of the list.
  2. Step 2: Recall linked list operations

    Inserting at the end means adding a new node after the current last node (tail).
  3. Final Answer:

    Adds a new node at the end (tail) of the list -> Option A
  4. Quick Check:

    InsertAtEnd = Add node at tail [OK]
Hint: InsertAtEnd means add node at tail, not head or remove [OK]
Common Mistakes:
  • Confusing insert at end with insert at beginning
  • Thinking it removes nodes instead of adding
  • Mixing up tail and head operations
2. Which of the following is the correct syntax to create a new node and insert it at the end of a singly linked list in C#?
easy
A. Node newNode = new Node(data); tail.next = newNode; tail = newNode;
B. Node newNode = new Node(data); newNode.next = head;
C. Node newNode = new Node(data); newNode.prev = tail; tail = newNode;
D. Node newNode = new Node(data); head = newNode;

Solution

  1. Step 1: Create a new node with data

    We create a new node using new Node(data).
  2. Step 2: Link new node at the end

    To insert at end, set tail.next = newNode and update tail = newNode.
  3. Final Answer:

    Node newNode = new Node(data); tail.next = newNode; tail = newNode; -> Option A
  4. Quick Check:

    Insert at tail = tail.next = newNode; tail = newNode [OK]
Hint: Tail insert needs tail.next and tail update [OK]
Common Mistakes:
  • Assigning newNode.next to head instead of tail.next
  • Forgetting to update tail pointer
  • Using prev pointer in singly linked list
3. What will be the output linked list after executing the following code?
LinkedList list = new LinkedList();
list.InsertAtEnd(10);
list.InsertAtEnd(20);
list.InsertAtEnd(30);
list.PrintList();

Assuming PrintList() prints nodes as value -> value -> ... -> null.
medium
A. 30 -> 20 -> 10 -> null
B. 10 -> 20 -> 30 -> null
C. 10 -> 20 -> null
D. null

Solution

  1. Step 1: Insert nodes at end in order

    Nodes 10, 20, 30 are inserted at the tail one by one, so list order is 10, then 20, then 30.
  2. Step 2: Print list in order

    Printing shows nodes in insertion order ending with null.
  3. Final Answer:

    10 -> 20 -> 30 -> null -> Option B
  4. Quick Check:

    InsertAtEnd preserves order: 10,20,30 [OK]
Hint: InsertAtEnd keeps order; print shows same sequence [OK]
Common Mistakes:
  • Assuming insert at end reverses order
  • Missing last node in print
  • Confusing head and tail positions
4. The following code tries to insert a node at the end of a singly linked list but causes a runtime error. What is the error?
public void InsertAtEnd(int data) {
    Node newNode = new Node(data);
    if (head == null) {
        head = newNode;
    } else {
        Node temp = head;
        while (temp.next != null) {
            temp = temp.next;
        }
        temp = newNode;
    }
}
medium
A. Node constructor is missing
B. The head is not updated when list is empty
C. The while loop condition is incorrect
D. The line temp = newNode; does not link the new node to the list

Solution

  1. Step 1: Analyze the while loop

    The loop finds the last node where temp.next == null.
  2. Step 2: Check how new node is linked

    Assigning temp = newNode; only changes local variable, not the last node's next pointer.
  3. Step 3: Correct linking

    Should assign temp.next = newNode; to link new node at end.
  4. Final Answer:

    The line temp = newNode; does not link the new node to the list -> Option D
  5. Quick Check:

    Must set temp.next = newNode, not temp = newNode [OK]
Hint: Assign newNode to temp.next, not temp variable [OK]
Common Mistakes:
  • Assigning newNode to temp instead of temp.next
  • Not updating head when list empty
  • Incorrect loop condition causing infinite loop
5. You have a singly linked list with nodes: 5 -> 15 -> 25 -> null. You want to insert a new node with value 35 at the end. After insertion, what will be the correct sequence of nodes? Also, what changes must be made if the list is empty initially?
hard
A. Sequence: 5 -> 15 -> 25 -> null; No changes needed for empty list
B. Sequence: 35 -> 5 -> 15 -> 25 -> null; If empty, set tail = newNode only
C. Sequence: 5 -> 15 -> 25 -> 35 -> null; If empty, set head = newNode and tail = newNode
D. Sequence: 5 -> 15 -> 25 -> 35 -> null; If empty, set tail.next = newNode only

Solution

  1. Step 1: Insert new node at end

    Adding 35 at end appends it after 25, so list becomes 5 -> 15 -> 25 -> 35 -> null.
  2. Step 2: Handle empty list case

    If list is empty, both head and tail must point to the new node to start the list properly.
  3. Final Answer:

    Sequence: 5 -> 15 -> 25 -> 35 -> null; If empty, set head = newNode and tail = newNode -> Option C
  4. Quick Check:

    Insert at end appends; empty list needs head and tail set [OK]
Hint: Empty list: set head and tail to new node; else tail.next = newNode [OK]
Common Mistakes:
  • Not updating both head and tail when list is empty
  • Inserting new node at head instead of tail
  • Only updating tail without linking new node
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