Open In App

Sum of smaller elements of nodes in a linked list

Improve
Improve
Like Article
Like
Save
Share
Report

Given a linked list, every node of which consists of a pair of integer variables first and second to hold the data, and a pointer pointing to the next node in the list. The task is to find the sum of min(first, second) for every node.
Examples: 
 

Input: (2, 3) -> (3, 4) – > (1, 10) -> (20, 15) -> (7, 5) -> NULL 
Output: 26 
2 + 3 + 1 + 15 + 5 = 26

Input: (7, 3) -> (3, 9) -> (5, 10) -> (20, 8) -> (19, 11) -> NULL 
Output: 30 
3 + 3 + 5 + 8 + 11 = 30

 

Approach: Traverse the whole linked list and for each node if the first element of node is smaller in comparison of second element of that node then we add first element to the variable which is holding the sum, otherwise we add the second element.
Below is the implementation of the above approach:
 

C++




// C++ implementation of the approach
#include <iostream>
using namespace std;
 
// Represents node of the linked list
struct Node {
    int first;
    int second;
    Node* next;
};
 
// Insertion in linked list
void insert(Node** head, int f, int s)
{
    Node* ptr = *head;
    Node* temp = new Node();
    temp->first = f;
    temp->second = s;
    temp->next = NULL;
 
    if (*head == NULL)
        *head = temp;
    else {
        while (ptr->next != NULL)
            ptr = ptr->next;
 
        ptr->next = temp;
    }
}
 
// Function to return the required sum
int calSum(Node* head)
{
    int sum = 0;
    while (head != NULL) {
 
        // Check for smaller element
        if (head->first > head->second)
            sum += head->second;
        else
            sum += head->first;
 
        head = head->next;
    }
    return sum;
}
 
// Driver code
int main()
{
    Node* head = NULL;
 
    insert(&head, 2, 3);
    insert(&head, 3, 4);
    insert(&head, 1, 10);
    insert(&head, 20, 15);
    insert(&head, 7, 5);
 
    cout << calSum(head) << endl;
 
    return 0;
}


Java




// Java implementation of the approach
class GFG {
    // Represents node of the linked list
    static class Node {
        int first;
        int second;
        Node next;
    }
 
    // Insertion in linked list
    static Node insert(Node head, int f, int s)
    {
        Node ptr = head;
        Node temp = new Node();
        temp.first = f;
        temp.second = s;
        temp.next = null;
 
        if (head == null)
            head = temp;
        else {
            while (ptr.next != null)
                ptr = ptr.next;
 
            ptr.next = temp;
        }
        return head;
    }
 
    // Function to return the required sum
    static int calSum(Node head)
    {
        int sum = 0;
        while (head != null) {
 
            // Check for smaller element
            if (head.first > head.second)
                sum += head.second;
            else
                sum += head.first;
 
            head = head.next;
        }
        return sum;
    }
 
    // Driver code
    public static void main(String args[])
    {
        Node head = null;
 
        head = insert(head, 2, 3);
        head = insert(head, 3, 4);
        head = insert(head, 1, 10);
        head = insert(head, 20, 15);
        head = insert(head, 7, 5);
 
        System.out.print(calSum(head));
    }
}
 
// This code is contributed by Arnab Kundu


Python3




# Python3 implementation of the approach
 
# Represents node of the linked list
class Node:
     
    def __init__(self, f, s):
        self.first = f
        self.second = s
        self.next = None
 
# Insertion in linked list
def insert(head, f, s):
 
    ptr = head
    temp = Node(f, s)
     
    if head == None:
        head = temp
    else:
        while ptr.next != None:
            ptr = ptr.next
 
        ptr.next = temp
         
    return head
 
# Function to return the required sum
def calSum(head):
 
    Sum = 0
    while head != None:
 
        # Check for smaller element
        if head.first > head.second:
            Sum += head.second
        else:
            Sum += head.first
 
        head = head.next
     
    return Sum
 
# Driver code
if __name__ == "__main__":
 
    head = None
 
    head = insert(head, 2, 3)
    head = insert(head, 3, 4)
    head = insert(head, 1, 10)
    head = insert(head, 20, 15)
    head = insert(head, 7, 5)
 
    print(calSum(head))
     
# This code is contributed by Rituraj Jain


C#




// C# implementation of the approach
using System;
 
class GFG {
 
    // Represents node of the linked list
    public class Node {
        public int first;
        public int second;
        public Node next;
    }
 
    // Insertion in linked list
    static Node insert(Node head, int f, int s)
    {
        Node ptr = head;
        Node temp = new Node();
        temp.first = f;
        temp.second = s;
        temp.next = null;
 
        if (head == null)
            head = temp;
        else {
            while (ptr.next != null)
                ptr = ptr.next;
 
            ptr.next = temp;
        }
        return head;
    }
 
    // Function to return the required sum
    static int calSum(Node head)
    {
        int sum = 0;
        while (head != null) {
 
            // Check for smaller element
            if (head.first > head.second)
                sum += head.second;
            else
                sum += head.first;
 
            head = head.next;
        }
        return sum;
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        Node head = null;
 
        head = insert(head, 2, 3);
        head = insert(head, 3, 4);
        head = insert(head, 1, 10);
        head = insert(head, 20, 15);
        head = insert(head, 7, 5);
 
        Console.Write(calSum(head));
    }
}
 
// This code contributed by Rajput-Ji


Javascript




<script>
 
      // JavaScript implementation of the approach
      // Represents node of the linked list
      class Node {
        constructor() {
          this.first = 0;
          this.second = 0;
          this.next = null;
        }
      }
 
      // Insertion in linked list
      function insert(head, f, s) {
        var ptr = head;
        var temp = new Node();
        temp.first = f;
        temp.second = s;
        temp.next = null;
 
        if (head == null) head = temp;
        else {
          while (ptr.next != null) ptr = ptr.next;
 
          ptr.next = temp;
        }
        return head;
      }
 
      // Function to return the required sum
      function calSum(head) {
        var sum = 0;
        while (head != null) {
          // Check for smaller element
          if (head.first > head.second) sum += head.second;
          else sum += head.first;
 
          head = head.next;
        }
        return sum;
      }
 
      // Driver code
      var head = null;
 
      head = insert(head, 2, 3);
      head = insert(head, 3, 4);
      head = insert(head, 1, 10);
      head = insert(head, 20, 15);
      head = insert(head, 7, 5);
 
      document.write(calSum(head));
       
</script>


Output: 

26

 

Time Complexity: O(N), where N is the number of nodes in the linkedlist.
Auxiliary Space: O(1)



Last Updated : 20 Sep, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads