Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added #1031 #1055

Merged
merged 2 commits into from
Nov 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
class ListNode:
def __init__(self, x):
self.val = x
self.next = None

class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
# Using a set to store the nodes of the first linked list
seen_nodes = set()
curr = headA

while curr:
seen_nodes.add(curr) # Add the current node to the set
curr = curr.next

curr2 = headB
while curr2:
if curr2 in seen_nodes: # Check if current node is in the set
return curr2 # Intersection found
curr2 = curr2.next

return None # No intersection

# Helper function to create a linked list from a list
def create_linked_list(values):
if not values:
return None
head = ListNode(values[0])
curr = head
for value in values[1:]:
curr.next = ListNode(value)
curr = curr.next
return head

# Example usage
if __name__ == "__main__":
# Create linked lists for the example
# List A: 1 -> 2 -> 3
# List B: 4 -> 5
# Intersection at node with value 3
intersection_node = ListNode(4)

headA = create_linked_list([1, 2, 3])
headA.next.next = intersection_node # Connect intersection
headB = create_linked_list([5, 6, 7, 8])
headB.next.next = intersection_node # Connect intersection

solution = Solution()
intersection = solution.getIntersectionNode(headA, headB)

if intersection:
print(f"Intersection at node with value: {intersection.val}")
else:
print("No intersection")
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Intersection of Two Linked Lists

## Problem Statement

In a linked list, the intersection of two lists occurs when two linked lists share a common node. Given two linked lists, this problem aims to find the node where the two lists intersect. If they do not intersect, the result should be `None`.

### Example

Consider the following two linked lists:

- **List A**: 1 -> 2 -> 3
- **List B**: 4 -> 5
- Both lists intersect at the node with value `3`.

The expected output in this case is:


## Approach

To solve this problem, we can use a hash set to store the nodes of the first linked list. As we traverse the second linked list, we can check if any node exists in the set. If we find a match, that node is the intersection point.

### Steps:

1. Traverse the first linked list and add each node to a set.
2. Traverse the second linked list and check if any node is in the set.
3. If a node is found in the set, return that node as the intersection.
4. If no nodes match, return `None`.
2 changes: 2 additions & 0 deletions Project-Structure.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@
* [Program](Algorithms_and_Data_Structures/Linked%20List/Clone_a_List_with_Random_Pointers/program.py)
* Detect Cycle In List
* [Program](Algorithms_and_Data_Structures/Linked%20List/Detect_Cycle_in_List/program.py)
* Intersection Of Two List
* [Program](Algorithms_and_Data_Structures/Linked%20List/Intersection_of_Two_List/program.py)
* [Menu Driven Code For Circular Doubly Linkedlist](Algorithms_and_Data_Structures/Linked%20List/Menu_Driven_Code_for_Circular_Doubly_LinkedList.py)
* [Menu Driven Code For Circular Linkedlist](Algorithms_and_Data_Structures/Linked%20List/Menu_Driven_Code_for_Circular_LinkedList.py)
* [Menu Driven Code For Doubly Linkedlist](Algorithms_and_Data_Structures/Linked%20List/Menu_Driven_Code_for_Doubly_LinkedList.py)
Expand Down
Loading