Skip to content

Commit 99407a3

Browse files
author
Ram swaroop
committed
intersection of 2 lists done + code refactoring
1 parent 88cfd30 commit 99407a3

File tree

4 files changed

+88
-1
lines changed

4 files changed

+88
-1
lines changed

src/me/ramswaroop/common/DoubleLinkedList.java

+7
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,14 @@ public void printList() {
198198

199199
public static <E extends Comparable<E>> DoubleLinkedList<E> getLinkedList(DoubleLinkedNode<E> node) {
200200
DoubleLinkedList<E> linkedList = new DoubleLinkedList<>();
201+
// set head
201202
linkedList.head = node;
203+
// set size
204+
DoubleLinkedNode<E> curr = node;
205+
while (curr != null) {
206+
linkedList.size++;
207+
curr = curr.next;
208+
}
202209
return linkedList;
203210
}
204211

src/me/ramswaroop/common/SingleLinkedList.java

+13
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,19 @@ public void printList() {
174174
out.println(curr.item + "]");
175175
}
176176

177+
public static <E extends Comparable<E>> SingleLinkedList<E> getLinkedList(SingleLinkedNode<E> node) {
178+
SingleLinkedList<E> linkedList = new SingleLinkedList<>();
179+
// set head
180+
linkedList.head = node;
181+
// set size
182+
SingleLinkedNode<E> curr = node;
183+
while (curr != null) {
184+
linkedList.size++;
185+
curr = curr.next;
186+
}
187+
return linkedList;
188+
}
189+
177190
private SingleLinkedNode<E> getPredecessorNode(int index) {
178191
return getNode(index - 1);
179192
}

src/me/ramswaroop/linkedlists/CloneWithRandPointers.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
* @author: ramswaroop
1010
* @date: 6/20/15
1111
* @time: 1:00 PM
12+
* @see: http://www.geeksforgeeks.org/a-linked-list-with-next-and-arbit-pointer/
1213
*/
1314
public class CloneWithRandPointers<E extends Comparable<E>> extends DoubleLinkedList<E> {
1415

@@ -55,7 +56,6 @@ public static void main(String a[]) {
5556
linkedList.getNode(3).prev = linkedList.getNode(1);
5657
linkedList.printList();
5758
DoubleLinkedList<Integer> clonedList = clone(linkedList.getNode(0));
58-
clonedList.size = 4;
5959
clonedList.set(0, 234);
6060
clonedList.set(1, 567);
6161
clonedList.printList();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package me.ramswaroop.linkedlists;
2+
3+
import me.ramswaroop.common.SingleLinkedList;
4+
import me.ramswaroop.common.SingleLinkedNode;
5+
6+
/**
7+
* Created by IntelliJ IDEA.
8+
*
9+
* @author: ramswaroop
10+
* @date: 6/18/15
11+
* @time: 10:34 PM
12+
*/
13+
public class IntersectionOfTwoLists<E extends Comparable<E>> extends SingleLinkedList<E> {
14+
15+
16+
public static <E extends Comparable<E>> SingleLinkedNode<E> getIntersectionNode(SingleLinkedList<E> list1,
17+
SingleLinkedList<E> list2) {
18+
19+
SingleLinkedNode<E> curr1, curr2;
20+
int diffLength = Math.abs(list1.size - list2.size);
21+
22+
// forward the pointer in the longer list by their diff. in length
23+
if (list1.size > list2.size) {
24+
curr1 = list1.getNode(0);
25+
curr2 = list2.getNode(0);
26+
} else {
27+
curr1 = list2.getNode(0);
28+
curr2 = list1.getNode(0);
29+
}
30+
while (diffLength > 0) {
31+
curr1 = curr1.next;
32+
diffLength--;
33+
}
34+
35+
// now compare both lists node by node
36+
while (curr1 != null) {
37+
if (curr1 == curr2) return curr1;
38+
curr1 = curr1.next;
39+
curr2 = curr2.next;
40+
}
41+
42+
// lists do not intersect
43+
return null;
44+
}
45+
46+
public static void main(String a[]) {
47+
SingleLinkedList<Integer> linkedList1 = new SingleLinkedList<>();
48+
linkedList1.add(00);
49+
linkedList1.add(11);
50+
linkedList1.add(22);
51+
linkedList1.add(33);
52+
linkedList1.add(44);
53+
linkedList1.add(55);
54+
linkedList1.add(66);
55+
linkedList1.add(77);
56+
linkedList1.add(88);
57+
SingleLinkedList<Integer> linkedList2 = new SingleLinkedList<>();
58+
linkedList2.add(56);
59+
linkedList2.add(78);
60+
linkedList2.add(45);
61+
linkedList2.add(23);
62+
linkedList2.getNode(3).next = linkedList1.getNode(5); // join 2 lists at some point
63+
linkedList2.size = 8; // update size after joining
64+
System.out.println(getIntersectionNode(linkedList1, linkedList2) != null ?
65+
getIntersectionNode(linkedList1, linkedList2).item : "List don't intersect!");
66+
}
67+
}

0 commit comments

Comments
 (0)