Bird
Raised Fist0
DSA Pythonprogramming~5 mins

Insert at Specific Position in Doubly Linked List in DSA Python - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Insert at Specific Position in Doubly Linked List
O(n)
Understanding Time Complexity

When inserting a new item at a certain place in a doubly linked list, we want to know how the time needed changes as the list grows.

We ask: How does the number of steps grow when the list gets longer?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


class Node:
    def __init__(self, data):
        self.data = data
        self.prev = None
        self.next = None

def insert_at_position(head, data, pos):
    new_node = Node(data)
    if pos == 0:
        new_node.next = head
        if head:
            head.prev = new_node
        return new_node
    current = head
    for _ in range(pos - 1):
        if current is None:
            return head
        current = current.next
    if current is None:
        return head
    new_node.next = current.next
    if current.next:
        current.next.prev = new_node
    current.next = new_node
    new_node.prev = current
    return head
    

This code inserts a new node at a given position in a doubly linked list by moving through the list to find the right spot.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: The for-loop that moves through the list nodes to reach the position before insertion.
  • How many times: Up to pos - 1 times, which depends on the position where we insert.
How Execution Grows With Input

As the list gets longer, the steps to reach the insertion point grow roughly in direct proportion to the position.

Input Size (n)Approx. Operations
10Up to 9 steps to reach position
100Up to 99 steps to reach position
1000Up to 999 steps to reach position

Pattern observation: The time grows linearly with the position where we insert, which can be up to the size of the list.

Final Time Complexity

Time Complexity: O(n)

This means the time to insert grows in a straight line with the list size or the position where we insert.

Common Mistake

[X] Wrong: "Inserting at any position in a doubly linked list always takes constant time because we have links both ways."

[OK] Correct: Even with links both ways, we must first find the position by moving through nodes, which takes time proportional to the position.

Interview Connect

Understanding how insertion time depends on position helps you explain and reason about linked list operations clearly, a skill valued in many coding discussions.

Self-Check

"What if we kept a pointer to the tail and inserted near the end? How would the time complexity change?"

Practice

(1/5)
1. What is the main purpose of inserting a node at a specific position in a doubly linked list?
easy
A. To add a new node exactly where you want in the list
B. To delete a node from the list
C. To reverse the entire list
D. To find the length of the list

Solution

  1. Step 1: Understand insertion in doubly linked list

    Insertion at a specific position means adding a new node exactly at that place, shifting others if needed.
  2. Step 2: Differentiate from other operations

    Deleting removes nodes, reversing changes order, and length counts nodes, none insert at a position.
  3. Final Answer:

    To add a new node exactly where you want in the list -> Option A
  4. Quick Check:

    Insert at position = Add node at exact place [OK]
Hint: Insertion means adding, not deleting or reversing [OK]
Common Mistakes:
  • Confusing insertion with deletion
  • Thinking insertion changes list order
  • Mixing insertion with counting nodes
2. Which of the following is the correct way to update the previous pointer of the new node when inserting at position 3 in a doubly linked list?
easy
A. new_node.prev = null
B. new_node.prev = head
C. new_node.prev = head.next.next
D. new_node.prev = head.next

Solution

  1. Step 1: Identify the node before position 3

    Position 3 means the new node comes after the second node, so prev points to node at position 2 (head.next).
  2. Step 2: Assign previous pointer correctly

    new_node.prev must point to the node at position 2, which is head.next.
  3. Final Answer:

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

    Prev pointer = node before insertion [OK]
Hint: Prev points to node before insertion position [OK]
Common Mistakes:
  • Setting prev to null instead of correct node
  • Confusing prev with next pointer
  • Using head instead of node before position
3. What will be the output list after inserting a node with value 10 at position 2 in the doubly linked list 5 <-> 15 <-> 20?
medium
A. 5 <-> 15 <-> 10 <-> 20 <-> null
B. 5 <-> 10 <-> 15 <-> 20 <-> null
C. 10 <-> 5 <-> 15 <-> 20 <-> null
D. 5 <-> 15 <-> 20 <-> 10 <-> null

Solution

  1. Step 1: Understand position 2 insertion

    Position 2 means the new node goes after the first node (5) and before the second node (15).
  2. Step 2: Insert node with value 10 at position 2

    List becomes 5 <-> 10 <-> 15 <-> 20, with null at the end.
  3. Final Answer:

    5 <-> 10 <-> 15 <-> 20 <-> null -> Option B
  4. Quick Check:

    Insert at 2 shifts old 2nd node right [OK]
Hint: Insert pushes existing nodes right from position [OK]
Common Mistakes:
  • Inserting after instead of at position
  • Placing new node at wrong position
  • Confusing list order after insertion
4. Given this code snippet for insertion at position 3, what is the error?
temp = head
for _ in range(2):
    temp = temp.next
new_node.next = temp.next
new_node.prev = temp
if temp.next:
    temp.next.prev = new_node
temp.next = new_node
medium
A. Loop runs one time too many causing temp to be wrong
B. new_node.prev should be temp.prev
C. new_node.next should be temp
D. Missing check if head is null before loop

Solution

  1. Step 1: Analyze loop and temp assignment

    The loop with range(2) moves temp from head (position 1) to position 2, then to position 3.
  2. Step 2: Identify the position error

    For insertion at position 3 (new node becomes position 3), temp must be at position 2 to insert after it; range(2) overshoots to position 3, so loop runs one time too many.
  3. Final Answer:

    Loop runs one time too many causing temp to be wrong -> Option A
  4. Quick Check:

    Loop range should be (position - 2) [OK]
Hint: Loop iterations = position - 2 for temp at (position - 1) [OK]
Common Mistakes:
  • Loop runs one time too many
  • Confusing prev and next pointers
  • Incorrect loop count for position
5. You have a doubly linked list: 1 <-> 3 <-> 5 <-> 7 <-> null. You want to insert a node with value 4 at position 3. After insertion, what will be the correct sequence of the list?
medium
A. 4 <-> 1 <-> 3 <-> 5 <-> 7 <-> null
B. 1 <-> 4 <-> 3 <-> 5 <-> 7 <-> null
C. 1 <-> 3 <-> 4 <-> 5 <-> 7 <-> null
D. 1 <-> 3 <-> 5 <-> 7 <-> 4 <-> null

Solution

  1. Step 1: Identify position 3 in the list

    Position 3 means the new node goes after the second node (3) and before the third node (5).
  2. Step 2: Insert node with value 4 at position 3

    The list becomes 1 <-> 3 <-> 4 <-> 5 <-> 7 <-> null, maintaining order and links.
  3. Final Answer:

    1 <-> 3 <-> 4 <-> 5 <-> 7 <-> null -> Option C
  4. Quick Check:

    Insert at position 3 places node between 3 and 5 [OK]
Hint: Insert at position shifts old node at that position right [OK]
Common Mistakes:
  • Inserting before position 1 instead of 3
  • Appending at end instead of position
  • Mixing node values order after insertion
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