forked from gouthampradhan/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathIntersectionOfTwoLists.java
105 lines (86 loc) · 2.23 KB
/
IntersectionOfTwoLists.java
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
package linked_list;
/**
* Created by gouthamvidyapradhan on 24/02/2017.
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
begin to intersect at node c1.
Notes:
If the two linked lists have no intersection at all, return null.
The linked lists must retain their original structure after the function returns.
You may assume there are no cycles anywhere in the entire linked structure.
Your code should preferably run in O(n) time and use only O(1) memory.
*/
public class IntersectionOfTwoLists
{
public static class ListNode
{
int val;
ListNode next;
ListNode(int x)
{
val = x;
next = null;
}
}
/**
* Main method
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception
{
ListNode node1 = new ListNode(2);
ListNode node2 = new ListNode(3);
node1.next = node2;
System.out.println(new IntersectionOfTwoLists().getIntersectionNode(node1, node2));
}
public ListNode getIntersectionNode(ListNode headA, ListNode headB)
{
if(headA == null || headB == null)
return null;
int l1len = 0, l2len = 0;
ListNode temp1 = headA;
while(temp1 != null)
{
temp1 = temp1.next;
l1len ++;
}
temp1 = headB;
while(temp1 != null)
{
temp1 = temp1.next;
l2len ++;
}
int diff = Math.abs(l1len - l2len);
ListNode temp2;
if(l1len > l2len)
{
temp1 = headA;
temp2 = headB;
}
else
{
temp1 = headB;
temp2 = headA;
}
while(diff != 0)
{
temp1 = temp1.next;
diff--;
}
while(!temp1.equals(temp2) )
{
temp1 = temp1.next;
temp2 = temp2.next;
if(temp1 == null || temp2 == null) return null;
}
if(temp1.equals(temp2))
return temp1;
return null;
}
}