Skip to content
geeksforgeeks
  • Tutorials
    • Python
    • Java
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
    • Practice Coding Problems
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • DSA
  • Interview Problems on Linked List
  • Practice Linked List
  • MCQs on Linked List
  • Linked List Tutorial
  • Types of Linked List
  • Singly Linked List
  • Doubly Linked List
  • Circular Linked List
  • Circular Doubly Linked List
  • Linked List vs Array
  • Time & Space Complexity
  • Advantages & Disadvantages
Open In App
Next Article:
Java Program For Finding A Triplet From Three Linked Lists With Sum Equal To A Given Number
Next article icon

Java Program For Finding A Triplet From Three Linked Lists With Sum Equal To A Given Number

Last Updated : 21 Dec, 2021
Comments
Improve
Suggest changes
Like Article
Like
Report

Given three linked lists, say a, b and c, find one node from each list such that the sum of the values of the nodes is equal to a given number. 
For example, if the three linked lists are 12->6->29, 23->5->8, and 90->20->59, and the given number is 101, the output should be triple "6 5 90".
In the following solutions, size of all three linked lists is assumed same for simplicity of analysis. The following solutions work for linked lists of different sizes also.

A simple method to solve this problem is to run three nested loops. The outermost loop picks an element from list a, the middle loop picks an element from b and the innermost loop picks from c. The innermost loop also checks whether the sum of values of current nodes of a, b and c is equal to given number. The time complexity of this method will be O(n^3).
Sorting can be used to reduce the time complexity to O(n*n). Following are the detailed steps. 
1) Sort list b in ascending order, and list c in descending order. 
2) After the b and c are sorted, one by one pick an element from list a and find the pair by traversing both b and c. See isSumSorted() in the following code. The idea is similar to Quadratic algorithm of 3 sum problem.

Following code implements step 2 only. The solution can be easily modified for unsorted lists by adding the merge sort code discussed here. 

Java
// Java program to find a triplet from three linked lists with // sum equal to a given number class LinkedList {     Node head;  // head of list      /* Linked list Node*/     class Node     {         int data;         Node next;         Node(int d) {data = d; next = null; }     }      /* A function to check if there are three elements in a, b       and c whose sum is equal to givenNumber.  The function       assumes that the list b is sorted in ascending order and       c is sorted in descending order. */    boolean isSumSorted(LinkedList la, LinkedList lb, LinkedList lc,                        int givenNumber)    {       Node a = la.head;        // Traverse all nodes of la       while (a != null)       {           Node b = lb.head;           Node c = lc.head;            // for every node in la pick 2 nodes from lb and lc           while (b != null && c!=null)           {               int sum = a.data + b.data + c.data;               if (sum == givenNumber)               {                  System.out.println("Triplet found " + a.data +                                      " " + b.data + " " + c.data);                  return true;               }                // If sum is smaller then look for greater value of b               else if (sum < givenNumber)                 b = b.next;                else                 c = c.next;           }           a = a.next;       }       System.out.println("No Triplet found");       return false;    }       /*  Given a reference (pointer to pointer) to the head        of a list and an int, push a new node on the front        of the list. */     void push(int new_data)     {         /* 1 & 2: Allocate the Node &                   Put in the data*/         Node new_node = new Node(new_data);          /* 3. Make next of new Node as head */         new_node.next = head;          /* 4. Move the head to point to new Node */         head = new_node;     }       /* Driver program to test above functions */     public static void main(String args[])     {         LinkedList llist1 = new LinkedList();         LinkedList llist2 = new LinkedList();         LinkedList llist3 = new LinkedList();          /* Create Linked List llist1 100->15->5->20 */         llist1.push(20);         llist1.push(5);         llist1.push(15);         llist1.push(100);          /*create a sorted linked list 'b' 2->4->9->10 */         llist2.push(10);         llist2.push(9);         llist2.push(4);         llist2.push(2);          /*create another sorted linked list 'c' 8->4->2->1 */         llist3.push(1);         llist3.push(2);         llist3.push(4);         llist3.push(8);          int givenNumber = 25;         llist1.isSumSorted(llist1,llist2,llist3,givenNumber);     } } /* This code is contributed by Rajat Mishra */ 

Output: 

Triplet Found: 15 2 8


Time complexity: The linked lists b and c can be sorted in O(nLogn) time using Merge Sort (See this). The step 2 takes O(n*n) time. So the overall time complexity is O(nlogn) + O(nlogn) + O(n*n) = O(n*n). 
In this approach, the linked lists b and c are sorted first, so their original order will be lost. If we want to retain the original order of b and c, we can create copy of b and c. 

Please refer complete article on Find a triplet from three linked lists with sum equal to a given number for more details!

Next Article
Java Program For Finding A Triplet From Three Linked Lists With Sum Equal To A Given Number

K

kartik
Improve
Article Tags :
  • Linked List
  • Java
  • Java Programs
  • DSA
  • Linked Lists
Practice Tags :
  • Java
  • Linked List

Similar Reads

    Java Program to Find a triplet that sum to a given value
    Given an array and a value, find if there is a triplet in array whose sum is equal to the given value. If there is such a triplet present in array, then print the triplet and return true. Else return false. Examples:   Input: array = {12, 3, 4, 1, 6, 9}, sum = 24; Output: 12, 3, 9 Explanation: There
    7 min read
    Java Program to Count triplets with sum smaller than a given value
    Given an array of distinct integers and a sum value. Find count of triplets with sum smaller than given sum value. The expected Time Complexity is O(n2).Examples:   Input : arr[] = {-2, 0, 1, 3} sum = 2. Output : 2 Explanation : Below are triplets with sum less than 2 (-2, 0, 1) and (-2, 0, 3) Input
    4 min read
    Java Program to Find a triplet such that sum of two equals to third element
    Given an array of integers, you have to find three numbers such that the sum of two elements equals the third element.Examples: Input: {5, 32, 1, 7, 10, 50, 19, 21, 2}Output: 21, 2, 19 Input: {5, 32, 1, 7, 10, 50, 19, 21, 0}Output: no such triplet exist Question source: Arcesium Interview Experience
    5 min read
    Java Program to Find all triplets with zero sum
    Given an array of distinct elements. The task is to find triplets in the array whose sum is zero. Examples :  Input : arr[] = {0, -1, 2, -3, 1} Output : (0 -1 1), (2 -3 1) Explanation : The triplets with zero sum are 0 + -1 + 1 = 0 and 2 + -3 + 1 = 0 Input : arr[] = {1, -2, 1, 0, 5} Output : 1 -2 1
    6 min read
    Java Program to Search an Element in a Linked List
    Prerequisite: LinkedList in java LinkedList is a linear data structure where the elements are not stored in contiguous memory locations. Every element is a separate object known as a node with a data part and an address part. The elements are linked using pointers or references. Linked Lists are pre
    5 min read
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences