Bird
Raised Fist0
DSA Cprogramming~10 mins

Insert at Beginning of Doubly Linked List in DSA C - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a new node with given data.

DSA C
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = [1];
newNode->prev = NULL;
newNode->next = NULL;
Drag options to blanks, or click blank then click option'
ANULL
Bdata
Chead
DnewNode
Attempts:
3 left
💡 Hint
Common Mistakes
Assigning NULL instead of data to newNode->data.
Using head instead of data for newNode->data.
2fill in blank
medium

Complete the code to link the new node's next pointer to the current head.

DSA C
newNode->next = [1];
Drag options to blanks, or click blank then click option'
ANULL
BnewNode->prev
Chead
DnewNode
Attempts:
3 left
💡 Hint
Common Mistakes
Setting newNode->next to NULL instead of head.
Setting newNode->next to newNode itself.
3fill in blank
hard

Fix the error in updating the previous pointer of the old head node.

DSA C
if (head != NULL) {
    head->[1] = newNode;
}
Drag options to blanks, or click blank then click option'
Adata
Bnext
Chead
Dprev
Attempts:
3 left
💡 Hint
Common Mistakes
Updating the next pointer instead of prev.
Trying to assign to head instead of head->prev.
4fill in blank
hard

Fill both blanks to update the head pointer and complete the insertion.

DSA C
head = [1];
return [2];
Drag options to blanks, or click blank then click option'
AnewNode
Bhead
CNULL
DnewNode->next
Attempts:
3 left
💡 Hint
Common Mistakes
Returning NULL instead of the updated head.
Assigning head to newNode->next instead of newNode.
5fill in blank
hard

Fill all three blanks to complete the insertAtBeginning function.

DSA C
struct Node* insertAtBeginning(struct Node* head, int data) {
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = [1];
    newNode->prev = NULL;
    newNode->next = [2];
    if (head != NULL) {
        head->prev = [3];
    }
    head = newNode;
    return head;
}
Drag options to blanks, or click blank then click option'
Adata
Bhead
CnewNode
DNULL
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing up pointers for next and prev.
Not updating head->prev when head is not NULL.

Practice

(1/5)
1. What is the main purpose of inserting a node at the beginning of a doubly linked list?
easy
A. To add a new node after the tail node
B. To add a new node before the current head node
C. To delete the first node of the list
D. To reverse the entire list

Solution

  1. Step 1: Understand the structure of a doubly linked list

    A doubly linked list has nodes connected both forward and backward, with a head and tail.
  2. Step 2: Identify what inserting at the beginning means

    Inserting at the beginning means adding a new node before the current head node, making it the new head.
  3. Final Answer:

    To add a new node before the current head node -> Option B
  4. Quick Check:

    Insert at beginning = add before head [OK]
Hint: Insert at beginning means new node becomes the head [OK]
Common Mistakes:
  • Confusing insertion at beginning with insertion at end
  • Thinking insertion deletes nodes
  • Mixing up head and tail positions
2. Which of the following is the correct way to update the previous pointer of the old head node when inserting a new node at the beginning in C?
easy
A. new_node->prev = old_head;
B. old_head->next = new_node;
C. new_node->next = old_head->prev;
D. old_head->prev = new_node;

Solution

  1. Step 1: Identify pointer updates when inserting at beginning

    The new node's next points to old head, and old head's prev points back to new node.
  2. Step 2: Choose correct pointer update for old head

    We must set old_head->prev = new_node to link backward to new node.
  3. Final Answer:

    old_head->prev = new_node; -> Option D
  4. Quick Check:

    Old head prev points to new node [OK]
Hint: Old head's prev points to new node after insertion [OK]
Common Mistakes:
  • Setting old_head->next instead of prev
  • Assigning new_node->prev incorrectly
  • Forgetting to update old head's prev pointer
3. What will be the output of the following code snippet after inserting a node with value 10 at the beginning of the doubly linked list?
typedef struct Node {
  int data;
  struct Node* prev;
  struct Node* next;
} Node;

Node* head = NULL;

void insertAtBeginning(int val) {
  Node* new_node = (Node*)malloc(sizeof(Node));
  new_node->data = val;
  new_node->prev = NULL;
  new_node->next = head;
  if (head != NULL) {
    head->prev = new_node;
  }
  head = new_node;
}

int main() {
  insertAtBeginning(20);
  insertAtBeginning(10);
  Node* temp = head;
  while (temp != NULL) {
    printf("%d ", temp->data);
    temp = temp->next;
  }
  return 0;
}
medium
A. 10
B. 20 10
C. 10 20
D. 20

Solution

  1. Step 1: Trace first insertion insertAtBeginning(20)

    List is empty, new node with 20 becomes head: 20 -> NULL
  2. Step 2: Trace second insertion insertAtBeginning(10)

    New node with 10 points next to old head (20), old head prev points to new node, head updated to 10: 10 <-> 20
  3. Final Answer:

    10 20 -> Option C
  4. Quick Check:

    List after insertions = 10 20 [OK]
Hint: New node becomes head, old head shifts right [OK]
Common Mistakes:
  • Printing nodes in reverse order
  • Not updating head pointer
  • Forgetting to update old head's prev pointer
4. Identify the error in the following code snippet for inserting a node at the beginning of a doubly linked list:
void insertAtBeginning(int val) {
  Node* new_node = (Node*)malloc(sizeof(Node));
  new_node->data = val;
  new_node->prev = NULL;
  new_node->next = head;
  if (head != NULL) {
    head->next = new_node;
  }
  head = new_node;
}
medium
A. head->next should be head->prev when updating old head
B. new_node->prev should not be NULL
C. head pointer should not be updated
D. malloc size is incorrect

Solution

  1. Step 1: Check pointer updates for old head

    When inserting at beginning, old head's prev pointer must point to new node, not next.
  2. Step 2: Identify incorrect line

    Code uses head->next = new_node; which wrongly sets old head's next pointer instead of prev.
  3. Final Answer:

    head->next should be head->prev when updating old head -> Option A
  4. Quick Check:

    Old head prev must point to new node [OK]
Hint: Old head prev, not next, points to new node [OK]
Common Mistakes:
  • Updating old head's next pointer instead of prev
  • Not updating head pointer
  • Incorrect malloc size usage
5. You have a doubly linked list with nodes: 5 <-> 15 <-> 25. You want to insert a new node with value 1 at the beginning. After insertion, what will be the correct sequence of node values when traversing from head to tail?
medium
A. 1 <-> 5 <-> 15 <-> 25
B. 5 <-> 15 <-> 25 <-> 1
C. 25 <-> 15 <-> 5 <-> 1
D. 1 <-> 15 <-> 5 <-> 25

Solution

  1. Step 1: Understand insertion at beginning

    New node with value 1 becomes new head, pointing next to old head (5).
  2. Step 2: Update pointers and traverse list

    Sequence after insertion: 1 (head) <-> 5 <-> 15 <-> 25 (tail).
  3. Final Answer:

    1 <-> 5 <-> 15 <-> 25 -> Option A
  4. Quick Check:

    New head is 1, followed by old nodes [OK]
Hint: New node becomes head, old head shifts right [OK]
Common Mistakes:
  • Appending new node at end instead of beginning
  • Mixing node order after insertion
  • Not updating head pointer
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