📖 Scenario: Imagine two train tracks that merge into one track at some point. Each track is like a linked list, and the merging point is the intersection node where both linked lists meet. We want to find this intersection point.
🎯 Goal: Build a program that creates two linked lists with a shared intersection node and finds the intersection point node using pointers.
📋 What You'll Learn
Create two linked lists with some nodes
Manually create an intersection by linking the second list to a node in the first list
Implement a function to find the intersection point of the two linked lists
Print the value of the intersection node or -1 if no intersection exists
💡 Why This Matters
🌍 Real World
Finding intersection points in linked data structures is useful in memory management, network routing, and detecting shared resources.
💼 Career
Understanding linked list intersections helps in debugging pointer-related bugs and optimizing data structure usage in software engineering roles.
Progress0 / 4 steps
1
Create two linked lists with nodes
Create a struct called Node with an int data and a Node* next. Then create two linked lists: head1 with nodes containing values 3, 6, 9, and head2 with nodes containing values 10, 15. Initialize head1 and head2 accordingly.
DSA C++
Hint
Define the Node struct first. Then create nodes for each list by linking them with next.
2
Create the intersection point
Link the next of the last node of head2 (node with value 15) to the node with value 9 in head1 to create an intersection.
DSA C++
Hint
Set the next pointer of the last node in head2 to point to the node with value 9 in head1.
3
Implement function to find intersection point
Write a function Node* getIntersectionNode(Node* head1, Node* head2) that returns the intersection node of the two linked lists or nullptr if there is no intersection. Use two pointers ptr1 and ptr2 to traverse the lists and switch heads when reaching the end.
DSA C++
Hint
Use two pointers starting at each head. Move them forward. When a pointer reaches the end, switch it to the other list's head. They will meet at the intersection or both become nullptr.
4
Print the intersection node data
Call getIntersectionNode(head1, head2) and print the data of the returned node. If the returned node is nullptr, print -1.
DSA C++
Hint
Call the function and check if the result is not nullptr. Print the data or -1 accordingly.
Practice
(1/5)
1. What does the term intersection point of two linked lists mean?
easy
A. The last node of each linked list.
B. The node where the values of both linked lists are equal.
C. The first node of the longer linked list.
D. The node where both linked lists share the same reference (memory address).
Solution
Step 1: Understand linked list nodes
Each node in a linked list has a value and a reference (address) to the next node.
Step 2: Define intersection point
The intersection point is where two linked lists share the exact same node reference, not just the same value.
Final Answer:
The node where both linked lists share the same reference (memory address). -> Option D
Quick Check:
Intersection means shared node reference = A [OK]
Hint: Intersection means same node object, not just same value [OK]
Common Mistakes:
Confusing same value with same node reference
Thinking intersection is the last node always
Assuming intersection means equal length lists
2. Which of the following C++ code snippets correctly declares a singly linked list node structure for intersection detection?
easy
A. struct Node { int data; Node* next; };
B. struct Node { int data; Node next; };
C. struct Node { int data; Node* next(){}; };
D. struct Node { int data; Node next(); };
Solution
Step 1: Understand pointer usage in C++ structs
A linked list node must have a pointer to the next node, so Node* next; is correct.
Step 2: Analyze options
struct Node { int data; Node* next; }; uses Node* next; which is correct. Options A, B, and D misuse pointer or function syntax.
Final Answer:
struct Node { int data; Node* next; }; -> Option A
Quick Check:
Pointer to next node = C [OK]
Hint: Use pointer (*) for next node in struct [OK]
Common Mistakes:
Forgetting the * pointer for next node
Using function syntax instead of pointer
Declaring next as object instead of pointer
3. Given two linked lists intersecting at node with value 7, what will the following code print?
Node* getIntersectionNode(Node* headA, Node* headB) {
Node* a = headA;
Node* b = headB;
while (a != b) {
a = a ? a->next : headB;
b = b ? b->next : headA;
}
return a;
}
// Lists:
// A: 3 -> 6 -> 9 -> 7 -> 10
// B: 1 -> 7 -> 10
Node* intersection = getIntersectionNode(headA, headB);
if (intersection) std::cout << intersection->data << std::endl;
else std::cout << -1 << std::endl;
medium
A. -1
B. 10
C. 7
D. 3
Solution
Step 1: Understand the algorithm
This code uses two pointers traversing both lists; when one reaches end, it switches to the other list's head. They meet at intersection.
Step 2: Trace the pointers
Both pointers meet at node with value 7, which is the intersection point.
A. It does not handle different list lengths, causing null pointer errors.
B. It uses incorrect comparison operator for nodes.
C. It returns the wrong node after loop ends.
D. It should use recursion instead of iteration.
Solution
Step 1: Analyze pointer movement
The code moves both pointers forward simultaneously without adjusting for different list lengths.
Step 2: Identify consequence
If lists differ in length, one pointer may reach null before the other, causing a null pointer dereference or infinite loop.
Final Answer:
It does not handle different list lengths, causing null pointer errors. -> Option A
Quick Check:
Unequal lengths cause errors = D [OK]
Hint: Adjust pointers for length difference before comparing [OK]
Common Mistakes:
Ignoring list length difference
Dereferencing null pointers
Assuming simultaneous traversal always works
5. You have two singly linked lists that intersect. List A has length 8, List B has length 5. Which approach correctly finds the intersection point efficiently?
hard
A. Traverse both lists fully and store nodes in hash sets, then find first common node.
B. Calculate length difference, advance longer list by difference, then move both pointers together.
C. Reverse both lists and compare nodes from start until they differ.
D. Compare node values one by one from heads until a matching value is found.
Solution
Step 1: Understand length difference method
Calculate difference (8 - 5 = 3), advance longer list by 3 nodes to align both lists.
Step 2: Traverse both lists together
Move both pointers one step at a time; the first node where they match is the intersection.
Final Answer:
Calculate length difference, advance longer list by difference, then move both pointers together. -> Option B
Quick Check:
Align by length difference then traverse = B [OK]
Hint: Advance longer list by length difference before simultaneous traversal [OK]
Common Mistakes:
Comparing node values instead of references
Reversing lists unnecessarily
Using extra space when not needed
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.