📖 Scenario: You are building a simple contact list app. Each contact will be stored in a doubly linked list node, allowing easy navigation forward and backward through contacts.
🎯 Goal: Create a doubly linked list with three contacts: Alice, Bob, and Charlie. Initialize the list so each node points correctly to the next and previous contacts.
📋 What You'll Learn
Define a Node class with data, prev, and next attributes
Create three nodes with data 'Alice', 'Bob', and 'Charlie'
Link the nodes so that Alice is first, Bob is second, and Charlie is third
Ensure prev and next pointers are correctly set for each node
💡 Why This Matters
🌍 Real World
Doubly linked lists are used in music players to move forward and backward through songs, or in browsers to navigate back and forth through pages.
💼 Career
Understanding doubly linked lists helps in jobs involving data structure design, memory management, and building efficient navigation systems.
Progress0 / 4 steps
1
Define the Node class
Define a class called Node with an __init__ method that takes data as a parameter and initializes self.data, self.prev, and self.next to None.
DSA Python
Hint
Think of each node as a box holding data and two pointers: one to the previous box and one to the next box.
2
Create three nodes for contacts
Create three variables called node1, node2, and node3 and assign them new Node objects with data 'Alice', 'Bob', and 'Charlie' respectively.
DSA Python
Hint
Use the Node class to create each contact node with the exact names and data.
3
Link the nodes to form the doubly linked list
Set node1.next to node2, node2.prev to node1, node2.next to node3, and node3.prev to node2 to link the nodes in order.
DSA Python
Hint
Remember, each node's next points forward and prev points backward.
4
Print the doubly linked list forward and backward
Use a current variable starting at node1 to print the list forward by following next pointers. Then use current starting at node3 to print the list backward by following prev pointers. Print the data values separated by -> and end with null.
DSA Python
Hint
Use a loop to move through the list using next for forward and prev for backward printing.
Practice
(1/5)
1. What is the main difference between a doubly linked list and a singly linked list?
easy
A. A doubly linked list can only be traversed forward.
B. A doubly linked list stores data in arrays instead of nodes.
C. A doubly linked list has nodes with pointers to both next and previous nodes.
D. A doubly linked list does not have a head pointer.
Solution
Step 1: Understand node structure in doubly linked list
Each node in a doubly linked list contains two pointers: one to the next node and one to the previous node.
Step 2: Compare with singly linked list
A singly linked list node has only one pointer to the next node, so it can only be traversed forward.
Final Answer:
A doubly linked list has nodes with pointers to both next and previous nodes. -> Option C
Quick Check:
Doubly linked list nodes have two pointers = C [OK]
Hint: Remember: doubly linked list nodes link both ways [OK]
Common Mistakes:
Thinking doubly linked list uses arrays
Assuming it can only go forward
Confusing head pointer presence
2. Which of the following is the correct way to define a node class for a doubly linked list in Python?
easy
A. class Node:
def __init__(self, data):
self.data = data
self.next = None
self.prev = None
B. class Node:
def __init__(self, data):
self.data = data
self.next = None
C. class Node:
def __init__(self, data):
self.data = data
self.prev = None
D. class Node:
def __init__(self, data):
self.next = None
self.prev = None
Solution
Step 1: Identify required attributes for doubly linked list node
A doubly linked list node must have data, a pointer to the next node, and a pointer to the previous node.
Step 2: Check each option for completeness
class Node:
def __init__(self, data):
self.data = data
self.next = None
self.prev = None correctly defines data, next, and prev attributes initialized properly.
Final Answer:
class Node with data, next, and prev attributes initialized -> Option A
Quick Check:
Node needs data, next, prev = A [OK]
Hint: Doubly linked list node needs both next and prev pointers [OK]
Common Mistakes:
Omitting prev pointer
Omitting data attribute
Defining next and prev but missing data
3. What will be the output of the following code that creates a doubly linked list with nodes containing 1, 2, 3?
class Node:
def __init__(self, data):
self.data = data
self.next = None
self.prev = None
class DoublyLinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
return
last = self.head
while last.next:
last = last.next
last.next = new_node
new_node.prev = last
def display_forward(self):
current = self.head
result = []
while current:
result.append(current.data)
current = current.next
return result
dll = DoublyLinkedList()
dll.append(1)
dll.append(2)
dll.append(3)
print(dll.display_forward())
medium
A. [3, 2, 1]
B. []
C. [1, 3, 2]
D. [1, 2, 3]
Solution
Step 1: Append nodes 1, 2, 3 to the doubly linked list
Nodes are added at the end. First node 1 becomes head, then 2 is linked after 1, then 3 after 2.
Step 2: Display nodes forward
Starting from head, nodes are visited in order 1 -> 2 -> 3, collected in list [1, 2, 3].
Final Answer:
[1, 2, 3] -> Option D
Quick Check:
Appending nodes in order shows [1, 2, 3] [OK]
Hint: Appending adds nodes at end; display forward shows insertion order [OK]
Common Mistakes:
Confusing order of nodes
Printing empty list if head is null
Mixing up forward and backward traversal
4. Identify the error in the following code that tries to append nodes to a doubly linked list:
class Node:
def __init__(self, data):
self.data = data
self.next = None
self.prev = None
class DoublyLinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
else:
last = self.head
while last.next:
last = last.next
last.next = new_node
new_node.next = last
medium
A. new_node.next should be new_node.prev to link backward
B. Missing return statement after setting head
C. The while loop condition should be last.prev instead of last.next
D. Node class is missing data attribute
Solution
Step 1: Analyze append method's linking logic
After finding last node, code sets last.next = new_node correctly, but sets new_node.next = last, which is wrong.
Step 2: Correct backward link pointer
Backward link should be new_node.prev = last, not new_node.next = last.
Final Answer:
new_node.next should be new_node.prev to link backward -> Option A
Quick Check:
Backward link uses prev pointer = D [OK]
Hint: Backward link uses prev, not next pointer [OK]
Common Mistakes:
Setting new_node.next instead of new_node.prev
Forgetting to link backward pointer
Confusing next and prev pointers
5. You want to create a doubly linked list from a Python list of values [10, 20, 30] and then print the list backward starting from the last node. Which code snippet correctly initializes the doubly linked list and prints the values backward?
hard
A. dll = DoublyLinkedList()
for val in [10, 20, 30]:
dll.append(val)
current = dll.head
while current.prev:
current = current.prev
while current:
print(current.data, end=' ')
current = current.next
B. dll = DoublyLinkedList()
for val in [10, 20, 30]:
dll.append(val)
current = dll.head
while current.next:
current = current.next
while current:
print(current.data, end=' ')
current = current.prev
C. dll = DoublyLinkedList()
for val in [10, 20, 30]:
dll.append(val)
current = dll.head
while current.next:
current = current.next
while current:
print(current.data, end=' ')
current = current.next
D. dll = DoublyLinkedList()
for val in [10, 20, 30]:
dll.append(val)
current = dll.head
while current.prev:
current = current.prev
while current:
print(current.data, end=' ')
current = current.prev
Solution
Step 1: Append values 10, 20, 30 to doubly linked list
Values are appended in order, head points to 10, last node is 30.
Step 2: Move to last node by traversing next pointers
Start at head, move forward while current.next exists to reach last node (30).
Step 3: Print backward by moving prev pointers
From last node, print data and move backward using current.prev until null.
Final Answer:
Traverse forward to the last node using next pointers, then print backward using prev pointers, producing 30 20 10 -> Option B
Quick Check:
Traverse next to last, then prev backward = A [OK]
Hint: Go forward to last node, then traverse backward with prev [OK]
Common Mistakes:
Trying to move backward from head
Using next pointer to go backward
Not moving to last node before backward print
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.