-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfind mergenodeval.py
135 lines (90 loc) · 3.6 KB
/
find mergenodeval.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# Find Merge Point of Two Lists
# Given pointers to the head nodes of linked lists that merge together at some point, find the node where the two lists merge. The merge point is where both lists point to the same node, i.e. they reference the same memory location. It is guaranteed that the two head nodes will be different, and neither will be NULL. If the lists share a common node, return that node's value.
# Note: After the merge point, both lists will share the same node pointers.
# Example
# In the diagram below, the two lists converge at Node x:
# [List #1] a--->b--->c
# \
# x--->y--->z--->NULL
# /
# [List #2] p--->q
# Function Description
# Complete the findMergeNode function in the editor below.
# findMergeNode has the following parameters:
# SinglyLinkedListNode pointer head1: a reference to the head of the first list
# SinglyLinkedListNode pointer head2: a reference to the head of the second list
# Returns
# int: the value of the node where the lists merge
# Input Format
# Do not read any input from stdin/console.
# The first line contains an integer , the number of test cases.
# Each of the test cases is in the following format:
# The first line contains an integer, , the node number where the merge will occur.
# The next line contains an integer, that is the number of nodes in the first list.
# Each of the following lines contains a value for a node. The next line contains an integer, that is the number of nodes in the second list.
# Each of the following lines contains a value for a node.
# Constraints
# The lists will merge.
# .
# .
# import math
# import os
# import random
# import re
# import sys
# class SinglyLinkedListNode:
# def __init__(self, node_data):
# self.data = node_data
# self.next = None
# class SinglyLinkedList:
# def __init__(self):
# self.head = None
# self.tail = None
# def insert_node(self, node_data):
# node = SinglyLinkedListNode(node_data)
# if not self.head:
# self.head = node
# else:
# self.tail.next = node
# self.tail = node
# def print_singly_linked_list(node, sep, fptr):
# while node:
# fptr.write(str(node.data))
# node = node.next
# if node:
# fptr.write(sep)
def findMergeNode(head1, head2):
while head1:
node = head2
while node:
if head1 == node:
return head1.data
node = node.next
head1 = head1.next
# if __name__ == '__main__':
# fptr = open(os.environ['OUTPUT_PATH'], 'w')
# tests = int(input())
# for tests_itr in range(tests):
# index = int(input())
# llist1_count = int(input())
# llist1 = SinglyLinkedList()
# for _ in range(llist1_count):
# llist1_item = int(input())
# llist1.insert_node(llist1_item)
# llist2_count = int(input())
# llist2 = SinglyLinkedList()
# for _ in range(llist2_count):
# llist2_item = int(input())
# llist2.insert_node(llist2_item)
# ptr1 = llist1.head;
# ptr2 = llist2.head;
# for i in range(llist1_count):
# if i < index:
# ptr1 = ptr1.next
# for i in range(llist2_count):
# if i != llist2_count-1:
# ptr2 = ptr2.next
# ptr2.next = ptr1
# result = findMergeNode(llist1.head, llist2.head)
# fptr.write(str(result) + '\n')
# fptr.close()