Bird
Raised Fist0
DSA C#programming~5 mins

Insert at End Tail Insert in DSA C# - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Insert at End Tail Insert
O(n)
Understanding Time Complexity

We want to understand how long it takes to add a new item at the end of a linked list.

How does the time needed change as the list grows bigger?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


public class Node {
    public int data;
    public Node next;
    public Node(int value) { data = value; next = null; }
}

public class LinkedList {
    public Node head;

    public void InsertAtEnd(int value) {
        Node newNode = new Node(value);
        if (head == null) {
            head = newNode;
            return;
        }
        Node current = head;
        while (current.next != null) {
            current = current.next;
        }
        current.next = newNode;
    }
}
    

This code adds a new node at the end of a singly linked list by walking through the list until it finds the last node.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: The while loop that moves through each node until the last one.
  • How many times: It runs once for each node in the list until the end is reached, so roughly n times where n is the number of nodes.
How Execution Grows With Input

As the list gets longer, the time to find the end grows in a straight line.

Input Size (n)Approx. Operations
10About 10 steps to reach the end
100About 100 steps to reach the end
1000About 1000 steps to reach the end

Pattern observation: The number of steps grows directly with the size of the list.

Final Time Complexity

Time Complexity: O(n)

This means the time to insert at the end grows linearly with the number of nodes in the list.

Common Mistake

[X] Wrong: "Inserting at the end is always fast and takes constant time."

[OK] Correct: Without a direct pointer to the last node, we must walk through the whole list, which takes longer as the list grows.

Interview Connect

Understanding this helps you explain why adding at the end of a linked list can be slow without extra pointers, showing your grasp of data structure details.

Self-Check

"What if we kept a pointer to the last node (tail)? How would the time complexity change?"

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