Wednesday, January 8, 2025
Google search engine
HomeLanguagesJavascriptJavascript Program For Finding A Triplet From Three Linked Lists With Sum...

Javascript 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 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!

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments