📖 Scenario: You are building a simple program to manage a list of tasks. Each task needs to be stored in order, and you want to be able to move forward and backward through the list easily.
🎯 Goal: Create a doubly linked list with three tasks: "Task1", "Task2", and "Task3". Initialize the list so each node points correctly to the next and previous tasks.
📋 What You'll Learn
Define a Node struct with data, prev, and next members
Create three nodes with data: "Task1", "Task2", and "Task3"
Link the nodes to form a doubly linked list
Create a head pointer pointing to the first node
💡 Why This Matters
🌍 Real World
Doubly linked lists are used in applications like web browsers to move forward and backward through history, or in music players to navigate playlists.
💼 Career
Understanding doubly linked lists helps in software development roles that require efficient data navigation and manipulation, such as game development, database management, and system programming.
Progress0 / 4 steps
1
Define Node struct and create three nodes
Define a struct Node with std::string data, Node* prev, and Node* next. Then create three Node pointers called node1, node2, and node3 with data "Task1", "Task2", and "Task3" respectively. Initialize their prev and next pointers to nullptr.
DSA C++
Hint
Remember to include prev and next pointers in the Node struct. Initialize them to nullptr when creating nodes.
2
Link nodes to form doubly linked list
Set the next pointer of node1 to node2 and the prev pointer of node2 to node1. Then set the next pointer of node2 to node3 and the prev pointer of node3 to node2.
DSA C++
Hint
Link each node's next to the following node and prev to the previous node.
3
Create head pointer to first node
Create a Node* pointer called head and set it to point to node1.
DSA C++
Hint
The head pointer should point to the first node in the list, which is node1.
4
Print the doubly linked list forward
Use a Node* pointer called current starting at head. Use a while loop to print each node's data followed by " <-> " until current is nullptr. After the loop, print "null".
DSA C++
Hint
Use a while loop to move through the list from head to the end, printing each node's data followed by " <-> ". End with "null".
Practice
(1/5)
1. What is the main purpose of a doubly linked list in data structures?
easy
A. To allow traversal in both forward and backward directions
B. To store data in a fixed-size array
C. To sort elements automatically
D. To store data only at the beginning
Solution
Step 1: Understand doubly linked list structure
A doubly linked list has nodes with pointers to both previous and next nodes.
Step 2: Identify traversal capability
This structure allows moving forward and backward through the list easily.
Final Answer:
To allow traversal in both forward and backward directions -> Option A
Quick Check:
Doubly linked list = forward and backward traversal [OK]
Hint: Remember: doubly means two directions [OK]
Common Mistakes:
Confusing doubly linked list with arrays
Thinking it sorts data automatically
Assuming it only allows forward traversal
2. Which of the following is the correct way to declare a node structure for a doubly linked list in C++?
easy
A. struct Node { int data; Node prev; Node next; };
B. struct Node { int data; Node next; Node prev; };
C. struct Node { int data; Node* next; };
D. struct Node { int data; Node* next; Node* prev; };
Solution
Step 1: Check pointer usage in node structure
Each node must have pointers to next and previous nodes, so use Node* for both.
Step 2: Verify syntax correctness
struct Node { int data; Node* next; Node* prev; }; correctly uses pointers (Node*) for next and prev, while others use incorrect types.
Final Answer:
struct Node { int data; Node* next; Node* prev; }; -> Option D
Quick Check:
Node pointers use * for next and prev [OK]
Hint: Use pointers (*) for next and prev nodes [OK]
Common Mistakes:
Using Node instead of Node* for pointers
Missing prev pointer in node
Incorrect order of members
3. What will be the output of the following code snippet that creates a doubly linked list with two nodes and prints their data?
struct Node {
int data;
Node* next;
Node* prev;
};
int main() {
Node* head = new Node{10, nullptr, nullptr};
Node* second = new Node{20, nullptr, head};
head->next = second;
std::cout << head->data << " -> " << second->data << " -> null";
return 0;
}
medium
A. 20 -> 10 -> null
B. 10 -> 20 -> null
C. 10 -> null
D. Compilation error
Solution
Step 1: Analyze node creation and linking
First node has data 10, second node has data 20 and points back to first node. Head's next points to second.
Step 2: Trace output statement
Prints head data (10), then second data (20), then "-> null" string.
Final Answer:
10 -> 20 -> null -> Option B
Quick Check:
Print order matches linked list nodes [OK]
Hint: Follow pointers to print nodes in order [OK]
Common Mistakes:
Confusing prev and next pointers
Printing second node first
Forgetting to set head->next
4. Identify the error in the following code that attempts to create a doubly linked list with one node:
struct Node {
int data;
Node* next;
Node* prev;
};
int main() {
Node* head = new Node;
head->data = 5;
head->next = head->prev = nullptr;
head->prev = head;
return 0;
}
medium
A. head->prev should not point to head itself
B. Missing initialization of head->data
C. head->next should point to head
D. Node structure is incomplete
Solution
Step 1: Review pointer assignments
head->next and head->prev are set to nullptr, then head->prev is set to head itself.
Step 2: Identify logical error
head->prev pointing to head creates a circular reference which is incorrect for a single node list.
Final Answer:
head->prev should not point to head itself -> Option A
Quick Check:
Single node prev = nullptr, not self [OK]
Hint: Single node prev and next must be nullptr [OK]
Common Mistakes:
Setting prev or next to self causing loops
Forgetting to initialize data
Confusing next and prev pointers
5. You want to create a doubly linked list with three nodes containing values 1, 2, and 3 respectively. Which of the following code snippets correctly initializes the list and links all nodes properly?
hard
A. Node* first = new Node{1, nullptr, nullptr};
Node* second = new Node{2, nullptr, first};
first->prev = second;
Node* third = new Node{3, nullptr, second};
second->prev = third;
B. Node* first = new Node{1, nullptr, nullptr};
Node* second = new Node{2, first, nullptr};
first->next = second;
Node* third = new Node{3, second, nullptr};
second->next = third;
C. Node* first = new Node{1, nullptr, nullptr};
Node* second = new Node{2, nullptr, first};
first->next = second;
Node* third = new Node{3, nullptr, second};
second->next = third;
D. Node* first = new Node{1, nullptr, nullptr};
Node* second = new Node{2, first, nullptr};
first->prev = second;
Node* third = new Node{3, second, nullptr};
second->prev = third;
Solution
Step 1: Check node creation and pointer assignments
Node* first = new Node{1, nullptr, nullptr};
Node* second = new Node{2, nullptr, first};
first->next = second;
Node* third = new Node{3, nullptr, second};
second->next = third; creates nodes with correct data and sets next and prev pointers properly: second's prev points to first, first's next points to second, third's prev points to second, second's next points to third.
Step 2: Verify linkage correctness
All nodes are linked forward and backward correctly, forming a proper doubly linked list.
Final Answer:
Node* first = new Node{1, nullptr, nullptr};
Node* second = new Node{2, nullptr, first};
first->next = second;
Node* third = new Node{3, nullptr, second};
second->next = third; -> Option C
Quick Check:
Next and prev pointers set correctly in Node* first = new Node{1, nullptr, nullptr};
Node* second = new Node{2, nullptr, first};
first->next = second;
Node* third = new Node{3, nullptr, second};
second->next = third; [OK]
Hint: Prev points backward, next points forward in order [OK]
Common Mistakes:
Swapping next and prev pointers
Not linking nodes both ways
Setting prev or next to nullptr incorrectly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.