Sum of smaller elements of nodes in a linked list
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 = 26Input: (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> |
26
Time Complexity: O(N), where N is the number of nodes in the linkedlist.
Auxiliary Space: O(1)