Open In App

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

Last Updated : 21 Dec, 2021
Improve
Improve
Like Article
Like
Save
Share
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

Javascript




<script>
// Javascript program to find a triplet from three linked lists with
// sum equal to a given number
  
/* Linked list Node*/
class Node
{
    constructor(d)
    {
        this.data = d;
        this.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. */
function isSumSorted(la,lb,lc,givenNumber)
{
    let a = la;
    
      // Traverse all nodes of la
      while (a != null)
      {
          let b = lb;
          let c = lc;
    
          // for every node in la pick 2 nodes from lb and lc
          while (b != null && c!=null)
          {
              let sum = a.data + b.data + c.data;
              if (sum == givenNumber)
              {
                 document.write("Triplet found " + a.data +
                                     " " + b.data + " " + c.data+"<br>");
                 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;
      }
      document.write("No Triplet found<br>");
      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. */
function push(head_ref,new_data)
{
    /* 1 & 2: Allocate the Node &
                  Put in the data*/
        let new_node = new Node(new_data);
    
        /* 3. Make next of new Node as head */
        new_node.next = (head_ref);
    
        (head_ref) = new_node;
          
        return head_ref;
          
}
  
let headA =null;
headA = push (headA, 20) 
headA = push (headA, 4) 
headA = push (headA, 15) 
headA = push (headA, 10) 
    
// create a sorted linked list 'b' 2.4.9.10 
let headB = null;
headB = push (headB, 10) 
headB = push (headB, 9) 
headB = push (headB, 4) 
headB = push (headB, 2) 
    
// create another sorted 
// linked list 'c' 8.4.2.1 
let headC = null;
headC = push (headC, 1) 
headC = push (headC, 2) 
headC = push (headC, 4) 
headC = push (headC, 8) 
    
let givenNumber = 25
    
isSumSorted (headA, headB, headC, givenNumber) 
  
  
// This code is contributed by avanitrachhadiya2155
</script>
  


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!



Previous Article
Next Article

Similar Reads

Program For Finding A Triplet From Three Linked Lists With Sum Equal To A Given Number
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-&gt;6-&gt;29, 23-&gt;5-&gt;8, and 90-&gt;20-&gt;59, and the given number is 101, the output should be triple "6 5 90".In the following solutions, size of all th
11 min read
C++ Program For Finding A Triplet From Three Linked Lists With Sum Equal To A Given Number
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-&gt;6-&gt;29, 23-&gt;5-&gt;8, and 90-&gt;20-&gt;59, and the given number is 101, the output should be triple "6 5 90".In the following solutions, size of all th
4 min read
C Program For Finding A Triplet From Three Linked Lists With Sum Equal To A Given Number
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-&gt;6-&gt;29, 23-&gt;5-&gt;8, and 90-&gt;20-&gt;59, and the given number is 101, the output should be triple "6 5 90".In the following solutions, size of all th
4 min read
Java Program For Finding A Triplet From Three Linked Lists With Sum Equal To A Given Number
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 i
4 min read
Python Program for Find a triplet from three linked lists with sum equal to a given number
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-&gt;6-&gt;29, 23-&gt;5-&gt;8, and 90-&gt;20-&gt;59, and the given number is 101, the output should be triple "6 5 90".In the following solutions, size of all th
4 min read
Find a triplet from three linked lists with sum equal to a given number
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-&gt;6-&gt;29, 23-&gt;5-&gt;8, and 90-&gt;20-&gt;59, and the given number is 101, the output should be triple "6 5 90".In the following solutions, size of all th
14 min read
Javascript Program For Finding Intersection Point Of Two Linked Lists
There are two singly linked lists in a system. By some programming error, the end node of one of the linked lists got linked to the second list, forming an inverted Y-shaped list. Write a program to get the point where two linked lists merge. Above diagram shows an example with two linked lists having 15 as intersection points. Recommended: Please
7 min read
Javascript Program For Finding Intersection Of Two Sorted Linked Lists
Given two lists sorted in increasing order, create and return a new list representing the intersection of the two lists. The new list should be made with its own memory — the original lists should not be changed.  Example:  Input: First linked list: 1->2->3->4->6 Second linked list be 2->4->6->8, Output: 2->4->6. The elements 2, 4, 6 are common in
4 min read
JavaScript Program to find Smallest Difference Triplet from Three Arrays
The article is about finding the smallest difference triplet from three arrays in JavaScript. Given three sorted arrays, we need to find three elements (one from each array) such that the difference between the maximum and minimum among the three is minimized. In other words, we are looking for a triplet (a, b, c) where a is from the first array, b
3 min read
C++ Program For Finding Intersection Of Two Sorted Linked Lists
Given two lists sorted in increasing order, create and return a new list representing the intersection of the two lists. The new list should be made with its own memory — the original lists should not be changed. Example: Input: First linked list: 1-&gt;2-&gt;3-&gt;4-&gt;6 Second linked list be 2-&gt;4-&gt;6-&gt;8, Output: 2-&gt;4-&gt;6. The elemen
6 min read
Practice Tags :