Bird
Raised Fist0
DSA C#programming~10 mins

Intersection Point of Two Linked Lists in DSA C# - Execution Trace

Choose your learning style10 modes available
Concept Flow - Intersection Point of Two Linked Lists
Start at head of List1 and List2
↓
Traverse both lists simultaneously
↓
If pointer reaches end, switch to other list's head
↓
Check if pointers are equal
↓
Intersection
↓
Repeat
Start pointers at heads of both lists, move forward. When a pointer reaches end, switch to other list's head. When pointers meet, that's intersection.
Execution Sample
DSA C#
Node GetIntersection(Node headA, Node headB) {
  Node a = headA, b = headB;
  while (a != b) {
    a = (a == null) ? headB : a.next;
    b = (b == null) ? headA : b.next;
  }
  return a;
}
Find intersection node by traversing both lists with two pointers switching heads at end.
Execution Table
StepOperationPointer APointer BNodes in List1Nodes in List2Visual State
1Initialize pointers1A1B1A->2A->3C->4C->5C->null1B->2B->3C->4C->5C->nullList1: 1A->2A->3C->4C->5C->null List2: 1B->2B->3C->4C->5C->null Pointers: A@1A, B@1B
2Compare pointers1A1BSameSamePointers move to next nodes
3Move pointers2A2BSameSamePointers: A@2A, B@2B
4Compare pointers2A2BSameSamePointers move to next nodes
5Move pointers3C3CSameSamePointers: A@3C, B@3C
6Compare pointers3C3CSameSameIntersection at node 3C
7Return intersection3C3CSameSameReturn node 3C as intersection
💡 Pointers meet at node 3C, intersection found.
Variable Tracker
VariableStartAfter Step 2After Step 4After Step 5Final
Pointer A1A2A3C3C3C
Pointer B1B2B3C3C3C
Key Moments - 3 Insights
Why do we switch pointer A to headB when it reaches the end of list A?
Switching pointer A to headB ensures both pointers traverse equal total length, so they meet at intersection or end. See execution_table step 2 where pointers move forward and switch heads if null.
What if the lists do not intersect? How does the loop end?
If no intersection, both pointers become null after traversing both lists fully, making a == b == null, ending the loop. This is implied after full traversal in the code.
Why do we compare pointers by reference (a == b) and not by value?
We compare by reference because intersection means the exact same node object, not just equal values. Execution_table step 6 shows pointers meeting at same node reference 3C.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 5, where are pointers A and B pointing?
ABoth at node 3C
BPointer A at 2A, Pointer B at 2B
CPointer A at 3C, Pointer B at 2B
DBoth at null
💡 Hint
Check the 'Pointer A' and 'Pointer B' columns at step 5 in execution_table.
At which step do pointers first become equal, indicating intersection?
AStep 3
BStep 5
CStep 6
DStep 7
💡 Hint
Look at the 'Compare pointers' operation and pointer values in execution_table rows.
If list2 was longer and pointers never met, what would happen to the pointers?
AThey would eventually both become null and loop ends
BThey would keep moving forever
CPointer A would stop, pointer B would continue
DThey would meet at last node anyway
💡 Hint
Refer to key_moments about no intersection scenario and loop termination.
Concept Snapshot
Intersection Point of Two Linked Lists:
- Use two pointers starting at heads of each list.
- Move pointers forward; if pointer reaches end, switch to other list's head.
- When pointers meet (same node), intersection found.
- If no intersection, pointers become null together.
- Time: O(m+n), Space: O(1).
Full Transcript
To find the intersection point of two linked lists, we use two pointers starting at the heads of each list. We move both pointers forward one node at a time. When a pointer reaches the end of its list, it switches to the head of the other list. This way, both pointers traverse the same total length. Eventually, if the lists intersect, the pointers will meet at the intersection node. If they do not intersect, both pointers will become null at the same time, ending the loop. This method uses no extra space and runs in linear time relative to the combined length of the lists.

Practice

(1/5)
1. What does the "Intersection Point of Two Linked Lists" problem ask you to find?
easy
A. The node where two linked lists merge or start sharing nodes
B. The length of the longer linked list
C. The sum of all node values in both lists
D. The last node of the first linked list

Solution

  1. Step 1: Understand the problem goal

    The problem asks to find the node where two linked lists merge or start sharing nodes, meaning they have a common reference from that node onward.
  2. Step 2: Differentiate from other concepts

    It is not about length, sum, or last node alone, but about the exact node where both lists intersect.
  3. Final Answer:

    The node where two linked lists merge or start sharing nodes -> Option A
  4. Quick Check:

    Intersection means shared node = A [OK]
Hint: Look for the first common node reference in both lists [OK]
Common Mistakes:
  • Confusing intersection with equal values instead of shared nodes
  • Thinking intersection means same length
  • Looking for sum or last node instead of merge point
2. Which of the following C# code snippets correctly declares a singly linked list node class for this problem?
easy
A. class Node { int val; Node next; Node(int x) { val = x; next = null; } }
B. public class ListNode { int val; ListNode next; ListNode() { val = 0; next = null; } }
C. public struct ListNode { int val; ListNode next; }
D. public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; next = null; } }

Solution

  1. Step 1: Check for correct access modifiers and constructor

    public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; next = null; } } uses public fields and a constructor that initializes value and next pointer properly.
  2. Step 2: Identify issues in other options

    class Node { int val; Node next; Node(int x) { val = x; next = null; } } lacks public keyword, so fields are private by default; public struct ListNode { int val; ListNode next; } uses struct which is not typical for linked lists; public class ListNode { int val; ListNode next; ListNode() { val = 0; next = null; } } has no constructor parameter and fields are private.
  3. Final Answer:

    public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; next = null; } } -> Option D
  4. Quick Check:

    Public class with constructor = B [OK]
Hint: Use public fields and constructor with parameter for node value [OK]
Common Mistakes:
  • Omitting public keyword causing access issues
  • Using struct instead of class for nodes
  • Not initializing next pointer to null
3. What will be the output of the following C# code snippet that finds the intersection point of two linked lists? public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; next = null; } } public class Solution { public ListNode GetIntersectionNode(ListNode headA, ListNode headB) { ListNode a = headA, b = headB; while (a != b) { a = (a == null) ? headB : a.next; b = (b == null) ? headA : b.next; } return a; } } // Setup lists ListNode common = new ListNode(8); common.next = new ListNode(10); ListNode headA = new ListNode(3); headA.next = new ListNode(7); headA.next.next = common; ListNode headB = new ListNode(99); headB.next = common; Solution sol = new Solution(); ListNode result = sol.GetIntersectionNode(headA, headB); Console.WriteLine(result.val);
medium
A. 99
B. 8
C. 7
D. 10

Solution

  1. Step 1: Understand the linked list setup

    List A: 3 -> 7 -> 8 -> 10; List B: 99 -> 8 -> 10. The intersection node is the node with value 8.
  2. Step 2: Trace the GetIntersectionNode method

    Two pointers traverse lists; when one reaches end, it switches to the other list head. They meet at intersection node 8.
  3. Final Answer:

    8 -> Option B
  4. Quick Check:

    Intersection node value = 8 [OK]
Hint: Pointers switch lists to align lengths and meet at intersection [OK]
Common Mistakes:
  • Confusing node values instead of node references
  • Assuming intersection is last node always
  • Not switching pointers to other list head
4. Identify the bug in this C# method intended to find the intersection point of two linked lists: public ListNode GetIntersectionNode(ListNode headA, ListNode headB) { ListNode a = headA, b = headB; while (a != b) { a = a.next; b = b.next; if (a == null && b == null) return null; } return a; }
medium
A. It uses incorrect comparison operator for nodes
B. It returns null too early when both pointers are null
C. It does not switch pointers to the other list when reaching null
D. It does not handle empty lists

Solution

  1. Step 1: Analyze pointer movement in the loop

    Both pointers move forward but never switch to the other list head when reaching null, so they may never meet.
  2. Step 2: Understand the consequence

    Without switching, if lists differ in length, pointers become null at different times and miss intersection.
  3. Final Answer:

    It does not switch pointers to the other list when reaching null -> Option C
  4. Quick Check:

    Switch pointers at null to find intersection [OK]
Hint: Switch pointers to other list head when null to align traversal [OK]
Common Mistakes:
  • Not switching pointers causes infinite loop or wrong result
  • Returning null too early without full traversal
  • Confusing node equality with value equality
5. Given two singly linked lists that may or may not intersect, which approach correctly finds the intersection node in O(m+n) time and O(1) space? Options: A) Use two pointers starting at heads; when a pointer reaches end, switch it to the other list's head; continue until they meet. B) Use a hash set to store nodes of first list, then check nodes of second list for presence. C) Calculate lengths of both lists, advance longer list pointer by difference, then move both pointers until node.val match. D) Reverse both lists and compare nodes from start until mismatch. Which is the best approach for this problem?
hard
A. Two pointers switching heads when reaching end
B. Hash set to store nodes of first list
C. Advance longer list pointer by length difference then compare node.val
D. Reverse both lists and compare nodes

Solution

  1. Step 1: Evaluate time and space complexity of each approach

    Two pointers switching heads when reaching end uses two pointers switching heads, runs in O(m+n) time and O(1) space.
  2. Step 2: Compare with other options

    Hash set to store nodes of first list uses extra space O(m); Advance longer list pointer by length difference then compare node.val is incorrect because it compares values instead of node references; Reverse both lists and compare nodes is destructive and inefficient.
  3. Step 3: Choose the best approach

    Two pointers switching heads when reaching end is clean, efficient, and uses constant space without modifying lists.
  4. Final Answer:

    Two pointers switching heads when reaching end -> Option A
  5. Quick Check:

    Two-pointer switch method = A [OK]
Hint: Use two pointers switching heads for O(1) space and linear time [OK]
Common Mistakes:
  • Using extra space unnecessarily
  • Modifying lists by reversing
  • Comparing node values instead of references
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