package com.interview.linklist; /** * http://www.geeksforgeeks.org/find-a-triplet-from-three-linked-lists-with-sum-equal-to-a-given-number/ * Test case * empty list * list with 0 1 or more nodes * negative sum * 0 sum * positive sum */ public class TripletToSumInLinkList { public void printTriplet(Node head1, Node head2, Node head3,int sum){ if(head1 == null || head2 == null || head3 == null){ return; } MergeSortLinkList msll = new MergeSortLinkList(); head2 = msll.sort(head2, true); head3 = msll.sort(head3, false); while(head1 != null){ int newSum = sum - head1.data; Node tempHead2 = head2; Node tempHead3 = head3; while(tempHead2 != null && tempHead3 != null){ if(tempHead2.data + tempHead3.data == newSum){ System.out.println(head1.data + " " + tempHead2.data + " " + tempHead3.data); break; } else if(tempHead2.data + tempHead3.data < newSum){ tempHead2 = tempHead2.next; }else{ tempHead3 = tempHead3.next; } } head1 = head1.next; } } public static void main(String args[]){ LinkList ll = new LinkList(); Node head = null; head = ll.addNode(1, head); head = ll.addNode(8, head); head = ll.addNode(-3, head); head = ll.addNode(14, head); Node head1 = null; head1 = ll.addNode(-1, head1); head1 = ll.addNode(22, head1); head1 = ll.addNode(31, head1); head1 = ll.addNode(11, head1); Node head2 = null; head2 = ll.addNode(5, head2); head2 = ll.addNode(7, head2); head2 = ll.addNode(3, head2); head2 = ll.addNode(1, head2); TripletToSumInLinkList tts = new TripletToSumInLinkList(); tts.printTriplet(head, head1, head2, 20); } }