package me.ramswaroop.linkedlists;
import me.ramswaroop.common.SingleLinkedList;
import me.ramswaroop.common.SingleLinkedNode;
/**
* Created by IntelliJ IDEA.
*
* @author: ramswaroop
* @date: 6/27/15
* @time: 11:13 AM
*/
public class IntersectionOf2SortedLists {
/**
* Returns a linked list with elements common in
* both {@param list1} and {@param list2}.
*
* @param list1
* @param list2
* @param <E>
* @return
*/
public static <E extends Comparable<E>> SingleLinkedList<E> getIntersectionList(SingleLinkedList<E> list1,
SingleLinkedList<E> list2) {
SingleLinkedNode<E> curr1 = list1.getNode(0), curr2 = list2.getNode(0);
SingleLinkedList<E> intersectedList = new SingleLinkedList<>();
while (curr1 != null && curr2 != null) {
// advance the current pointer of the list having smaller {@code item}
if (curr1.item.compareTo(curr2.item) < 0) {
curr1 = curr1.next;
} else if (curr1.item.compareTo(curr2.item) > 0) {
curr2 = curr2.next;
} else { // both nodes are equal so add it to the result
intersectedList.add(curr1.item);
curr1 = curr1.next;
curr2 = curr2.next;
}
}
return intersectedList;
}
public static void main(String a[]) {
SingleLinkedList<Integer> linkedList1 = new SingleLinkedList<>();
linkedList1.add(00);
linkedList1.add(11);
linkedList1.add(22);
linkedList1.add(33);
linkedList1.add(44);
linkedList1.add(55);
linkedList1.printList();
SingleLinkedList<Integer> linkedList2 = new SingleLinkedList<>();
linkedList2.add(21);
linkedList2.add(33);
linkedList2.add(44);
linkedList2.add(55);
linkedList2.add(67);
linkedList2.add(89);
linkedList2.printList();
getIntersectionList(linkedList1, linkedList2).printList();
}
}