Bird
Raised Fist0
DSA Cprogramming~30 mins

Traversal and Printing a Linked List in DSA C - Build from Scratch

Choose your learning style10 modes available
Traversal and Printing a Linked List
📖 Scenario: Imagine you have a chain of boxes, each holding a number and a link to the next box. This is like a linked list. You want to look inside each box and write down the numbers in order.
🎯 Goal: You will create a simple linked list with three nodes, then write code to go through each node one by one and print the numbers stored inside.
📋 What You'll Learn
Create a struct called Node with an integer data and a pointer next to the next node
Create three nodes with data values 10, 20, and 30 linked together
Create a pointer called head that points to the first node
Write a loop to traverse the linked list starting from head
Print the data of each node followed by ->, ending with NULL
💡 Why This Matters
🌍 Real World
Linked lists are used in many programs to store items in order when the number of items can change. Traversing and printing helps us see the list contents.
💼 Career
Understanding linked lists and how to traverse them is a key skill for software developers, especially when working with low-level data structures or preparing for coding interviews.
Progress0 / 4 steps
1
Create the linked list nodes
Create a struct called Node with an integer data and a pointer next to Node. Then create three variables node1, node2, and node3 of type Node. Set their data values to 10, 20, and 30 respectively.
DSA C
Hint

Start by defining the Node struct with two members: data and next. Then create three variables of this struct and assign the data values.

2
Link the nodes and create the head pointer
Set node1.next to point to &node2, node2.next to point to &node3, and node3.next to NULL. Then create a pointer head of type struct Node* and set it to point to &node1.
DSA C
Hint

Remember to link each node's next to the address of the following node. The last node's next should be NULL. Then set head to the first node's address.

3
Traverse the linked list
Create a pointer current of type struct Node* and set it to head. Use a while loop that runs while current is not NULL. Inside the loop, print the data of current followed by ->. Then update current to current->next.
DSA C
Hint

Use a pointer to move through the list. Print each node's data followed by an arrow. Stop when you reach NULL.

4
Print NULL at the end
After the while loop, print NULL followed by a newline to show the end of the linked list.
DSA C
Hint

After the loop finishes, print NULL and a newline to show the list ends.

Practice

(1/5)
1. What is the main purpose of traversing a linked list in C?
easy
A. To delete the entire linked list
B. To visit each node and access its data
C. To create a new linked list
D. To reverse the linked list

Solution

  1. Step 1: Understand traversal meaning

    Traversal means visiting each node one by one in the linked list.
  2. Step 2: Identify traversal purpose

    The main goal is to access or print the data stored in each node.
  3. Final Answer:

    To visit each node and access its data -> Option B
  4. Quick Check:

    Traversal = Visit nodes [OK]
Hint: Traversal means visiting nodes to read data [OK]
Common Mistakes:
  • Confusing traversal with deletion
  • Thinking traversal creates new nodes
  • Assuming traversal reverses the list
2. Which of the following is the correct syntax to start traversing a linked list named head in C?
easy
A. Node* temp = &head;
B. struct Node temp = head;
C. struct Node* temp = head;
D. Node temp = head;

Solution

  1. Step 1: Understand pointer usage

    In C, linked list nodes are accessed via pointers, so temp must be a pointer to Node.
  2. Step 2: Check syntax correctness

    struct Node* temp = head; correctly declares temp as a pointer and assigns it to head.
  3. Final Answer:

    struct Node* temp = head; -> Option C
  4. Quick Check:

    Pointer assignment = struct Node* temp = head [OK]
Hint: Use pointer variable to traverse linked list [OK]
Common Mistakes:
  • Using struct Node instead of pointer
  • Taking address of head incorrectly
  • Missing struct keyword if needed
3. What will be the output of the following C code snippet that traverses and prints a linked list?
struct Node {
  int data;
  struct Node* next;
};

int main() {
  struct Node n3 = {30, NULL};
  struct Node n2 = {20, &n3};
  struct Node n1 = {10, &n2};
  struct Node* head = &n1;

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

Solution

  1. Step 1: Trace linked list nodes

    The list nodes are n1(10) -> n2(20) -> n3(30) -> NULL.
  2. Step 2: Follow traversal and print

    The loop prints each node's data followed by ' -> ', then prints 'NULL' at the end.
  3. Final Answer:

    10 -> 20 -> 30 -> NULL -> Option A
  4. Quick Check:

    Print nodes in order = 10 -> 20 -> 30 -> NULL [OK]
Hint: Follow next pointers to print nodes in order [OK]
Common Mistakes:
  • Printing nodes in reverse order
  • Missing '->' arrows in output
  • Forgetting to print NULL at end
4. Identify the error in the following code snippet that attempts to print a linked list:
struct Node {
  int data;
  struct Node* next;
};

void printList(struct Node* head) {
  while (head->next != NULL) {
    printf("%d -> ", head->data);
    head = head->next;
  }
  printf("NULL\n");
}
medium
A. head should be a double pointer
B. Missing semicolon after printf
C. printf format specifier is incorrect
D. The loop condition should be head != NULL

Solution

  1. Step 1: Analyze loop condition

    The loop stops when head->next is NULL, so it skips printing the last node.
  2. Step 2: Correct loop condition

    Changing condition to head != NULL ensures all nodes, including last, are printed.
  3. Final Answer:

    The loop condition should be head != NULL -> Option D
  4. Quick Check:

    Loop until head is NULL to print all nodes [OK]
Hint: Loop until pointer is NULL, not next pointer [OK]
Common Mistakes:
  • Stopping loop too early
  • Using wrong pointer type
  • Ignoring last node in print
5. Given a linked list where some nodes may have data value 0, which of the following code snippets correctly prints all nodes including those with 0?
struct Node* temp = head;
while (temp) {
  if (temp->data) {
    printf("%d -> ", temp->data);
  }
  temp = temp->next;
}
printf("NULL\n");
hard
A. Change 'if (temp->data)' to always print without condition
B. Add 'temp = temp->next;' inside the if block only
C. Use 'while (temp != NULL)' and keep the if condition
D. Replace 'printf' with 'puts' to print zeros

Solution

  1. Step 1: Understand the if condition effect

    The condition 'if (temp->data)' skips printing nodes with data 0 because 0 is false.
  2. Step 2: Fix to print all nodes

    Removing the if condition prints all nodes including those with 0.
  3. Final Answer:

    Change 'if (temp->data)' to always print without condition -> Option A
  4. Quick Check:

    Print all nodes regardless of data value [OK]
Hint: Do not skip nodes with zero data when printing [OK]
Common Mistakes:
  • Skipping zero values due to if condition
  • Moving pointer only inside if block causing infinite loop
  • Using wrong print function for integers
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