Bird
Raised Fist0
DSA Cprogramming~10 mins

Creating a Singly Linked List from Scratch in DSA C - Code Step by Step

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

Complete the code to define the node structure for a singly linked list.

DSA C
typedef struct Node {
    int data;
    struct Node* [1];
} Node;
Drag options to blanks, or click blank then click option'
Apointer
Bprev
Clink
Dnext
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'prev' which is for doubly linked lists.
Using generic names like 'pointer' or 'link' which are uncommon.
2fill in blank
medium

Complete the code to create a new node dynamically.

DSA C
Node* createNode(int value) {
    Node* newNode = (Node*)malloc(sizeof([1]));
    if (newNode == NULL) return NULL;
    newNode->data = value;
    newNode->next = NULL;
    return newNode;
}
Drag options to blanks, or click blank then click option'
ANode
Bnode
Cstruct Node
DNode*
Attempts:
3 left
💡 Hint
Common Mistakes
Using lowercase 'node' which is undefined.
Using 'struct Node' inside sizeof without typedef.
3fill in blank
hard

Fix the error in the function to append a node at the end of the list.

DSA C
void appendNode(Node** head, int value) {
    Node* newNode = createNode(value);
    if (*head == NULL) {
        *head = newNode;
        return;
    }
    Node* temp = *head;
    while (temp->[1] != NULL) {
        temp = temp->next;
    }
    temp->next = newNode;
}
Drag options to blanks, or click blank then click option'
Anext
Bprev
Clink
Dpointer
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'prev' which is for doubly linked lists.
Using undefined pointer names like 'link' or 'pointer'.
4fill in blank
hard

Fill both blanks to insert a node at the beginning of the list.

DSA C
void insertAtHead(Node** head, int value) {
    Node* newNode = createNode(value);
    newNode->[1] = *head;
    *head = [2];
}
Drag options to blanks, or click blank then click option'
Anext
Bhead
CnewNode
Dprev
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'prev' which is not used in singly linked lists.
Assigning head to newNode->next instead of the other way.
5fill in blank
hard

Fill all three blanks to print all elements of the singly linked list.

DSA C
void printList(Node* head) {
    Node* current = head;
    while (current != [1]) {
        printf("%d -> ", current->[2]);
        current = current->[3];
    }
    printf("NULL\n");
}
Drag options to blanks, or click blank then click option'
ANULL
Bdata
Cnext
Dhead
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'head' instead of NULL in the loop condition.
Printing 'next' instead of 'data'.
Moving current to 'data' instead of 'next'.

Practice

(1/5)
1. What is the main purpose of a singly linked list in data structures?
easy
A. To store elements with direct access by index like an array
B. To store elements in a sequence where each element points to the next
C. To store elements in a sorted order automatically
D. To store elements with multiple pointers to previous nodes

Solution

  1. Step 1: Understand singly linked list structure

    A singly linked list stores elements where each node points only to the next node, forming a chain.
  2. Step 2: Compare with other data structures

    Unlike arrays, singly linked lists do not provide direct index access, and unlike doubly linked lists, nodes have only one pointer.
  3. Final Answer:

    To store elements in a sequence where each element points to the next -> Option B
  4. Quick Check:

    Singly linked list = sequence with next pointers [OK]
Hint: Remember: singly linked list nodes have one next pointer only [OK]
Common Mistakes:
  • Thinking singly linked list allows direct index access
  • Confusing singly linked list with doubly linked list
  • Assuming automatic sorting in singly linked list
2. Which of the following is the correct way to define a node structure for a singly linked list in C?
easy
A. typedef struct Node { int data; struct Node* next; } Node;
B. typedef struct Node { int data; Node* next; } Node;
C. struct Node { int data; struct Node next; };
D. struct Node { int data; struct Node* prev; };

Solution

  1. Step 1: Check pointer usage in struct

    The next pointer must be a pointer to struct Node, so use struct Node* next;.
  2. Step 2: Verify typedef correctness

    typedef struct Node { int data; struct Node* next; } Node; correctly uses typedef and pointer syntax for next node.
  3. Final Answer:

    typedef struct Node { int data; struct Node* next; } Node; -> Option A
  4. Quick Check:

    Node struct uses pointer to struct Node for next [OK]
Hint: Use 'struct Node* next;' inside struct for next pointer [OK]
Common Mistakes:
  • Omitting 'struct' keyword before Node* inside struct
  • Using 'Node* next;' without typedef defined yet
  • Using 'struct Node next;' instead of pointer
  • Using 'prev' pointer instead of 'next' for singly linked list
3. What will be the output of the following C code snippet that creates a singly linked list with two nodes and prints their data?
typedef struct Node {
    int data;
    struct Node* next;
} Node;

int main() {
    Node* head = malloc(sizeof(Node));
    head->data = 10;
    head->next = malloc(sizeof(Node));
    head->next->data = 20;
    head->next->next = NULL;

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

Solution

  1. Step 1: Trace node creation and data assignment

    First node data is 10, second node data is 20, linked correctly.
  2. Step 2: Trace printing loop

    Loop prints data of head (10), then moves to next node (20), then stops at NULL.
  3. Final Answer:

    10 20 -> Option A
  4. Quick Check:

    Prints nodes in order: 10 then 20 [OK]
Hint: Follow next pointers to print nodes in order [OK]
Common Mistakes:
  • Confusing order of nodes printed
  • Forgetting to set next of last node to NULL
  • Assuming compilation error due to missing includes (not shown)
4. Identify the error in the following code that attempts to create a singly linked list node and assign data:
typedef struct Node {
    int data;
    struct Node* next;
} Node;

int main() {
    Node* head;
    head->data = 5;
    head->next = NULL;
    return 0;
}
medium
A. data should be a pointer, not int
B. next pointer should point to previous node
C. head is not initialized before accessing its members
D. struct Node definition is incorrect

Solution

  1. Step 1: Check pointer initialization

    head is declared but not assigned memory before accessing its members.
  2. Step 2: Understand consequences

    Accessing head->data without allocation causes undefined behavior or crash.
  3. Final Answer:

    head is not initialized before accessing its members -> Option C
  4. Quick Check:

    Pointer must be allocated before use [OK]
Hint: Always allocate memory before using pointer members [OK]
Common Mistakes:
  • Assuming pointer is auto-initialized
  • Confusing next pointer direction
  • Thinking data must be pointer type
5. You want to create a singly linked list from scratch that stores integers 1, 2, 3 in order. Which sequence of operations correctly builds the list?
hard
A. Allocate node1, set data=1, set node1->next=NULL, allocate node2, set data=2, set node2->next=NULL, allocate node3, set data=3, set node3->next=NULL
B. Allocate node1, set data=1, allocate node2, set data=2, allocate node3, set data=3, link node3->next=node2, link node2->next=node1, set node1->next=NULL
C. Allocate node1, set data=1, link node1->next=node2, allocate node2, set data=2, link node2->next=node3, allocate node3, set data=3, set node3->next=NULL
D. Allocate node1, set data=1, allocate node2, set data=2, link node1->next=node2, allocate node3, set data=3, link node2->next=node3, set node3->next=NULL

Solution

  1. Step 1: Allocate nodes and assign data in order

    Nodes must be allocated and data assigned before linking.
  2. Step 2: Link nodes in correct sequence

    Link node1 to node2, node2 to node3, and node3 to NULL to end list.
  3. Final Answer:

    Allocate node1, set data=1, allocate node2, set data=2, link node1->next=node2, allocate node3, set data=3, link node2->next=node3, set node3->next=NULL -> Option D
  4. Quick Check:

    Correct order and linking builds list 1->2->3->NULL [OK]
Hint: Link nodes only after allocating and setting data [OK]
Common Mistakes:
  • Linking nodes before allocation
  • Not setting last node's next to NULL
  • Linking nodes in reverse order
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