Modify Linked List by replacing each node by nearest multiple of K - GeeksforGeeks

08 Dec, 2021
Given a singly Linked List L consisting of N nodes and an integer K, the task is to modify the value of each node of the given Linked List to its nearest multiple of K, not exceeding the value of the node.
Examples:
Input: LL: 1 -> 2 -> 3 -> 5, K = 2 Output: 0 -> 2 -> 2 -> 4Explanation:The resultant LL has values having less than the original LL value and is a multiple of K(= 2).
Input: LL:13 -> 14 -> 26 -> 29 -> 40, K = 13Output: 13 -> 13 -> 26 -> 26 -> 39
Approach: The given problem can be solved by traversing the given Linked List and for each node traversed, find the floor value, say val, of the node value divided by K and update the node values to val*K.
Below is the implementation of the above approach:
C++
Java
Python3
C#
Javascript
// C++ program for the above approach #include <iostream>using namespace std; // Structure of nodestruct node {    int data;    node* next;}; // Function to replace the node N// by the nearest multiple of Knode* EvalNearestMult(node* N, int K){    node* temp = N;    int t;     // Traverse the Linked List    while (N != NULL) {         // If data is less than K        if (N->data < K)            N->data = 0;         else {             // If the data of current            // node is same as K            if (N->data == K)                N->data = K;             // Otherwise change the value            else {                N->data = (N->data / K) * K;            }        }         // Move to the next node        N = N->next;    }     // Return the updated LL    return temp;} // Function to print the nodes of// the Linked Listvoid printList(node* N){    // Traverse the LL    while (N != NULL) {         // Print the node's data        cout << N->data << "  ";        N = N->next;    }} // Driver Codeint main(){    // Given Linked List    node* head = NULL;    node* second = NULL;    node* third = NULL;     head = new node();    second = new node();    third = new node();     head->data = 3;    head->next = second;    second->data = 4;    second->next = third;    third->data = 8;    third->next = NULL;     node* t = EvalNearestMult(head, 3);     printList(t);     return 0;}
// Java program for the above approachimport java.io.*; class GFG {     // Structure of node    static class node {        int data;        node next;         node(int d)        {            data = d;        }    }     // Function to replace the node N    // by the nearest multiple of K    static node EvalNearestMult(node N, int K)    {        node temp = N;        int t;         // Traverse the Linked List        while (N != null) {             // If data is less than K            if (N.data < K)                N.data = 0;             else {                 // If the data of current                // node is same as K                if (N.data == K)                    N.data = K;                 // Otherwise change the value                else {                    N.data = (N.data / K) * K;                }            }             // Move to the next node            N = N.next;        }         // Return the updated LL        return temp;    }     // Function to print the nodes of    // the Linked List    static void printList(node N)    {        // Traverse the LL        while (N != null) {             // Print the node's data            System.out.print(N.data + "  ");            N = N.next;        }    }     // Driver Code    public static void main(String[] args)    {        // Given Linked List        node head = new node(3);        head.next = new node(5);          head.next.next = new node(8);         node t = EvalNearestMult(head, 3);         printList(t);    }} // This code is contributed by Dharanendra L V
# Python program for the above approach # Structure of Nodeclass Node:    def __init__(self, data):        self.data = data;        self.next = None;     # Function to replace the Node N# by the nearest multiple of Kdef EvalNearestMult(N, K):    temp = N;    t;     # Traverse the Linked List    while (N != None):         # If data is less than K        if (N.data < K):            N.data = 0;         else:             # If the data of current            # Node is same as K            if (N.data == K):                N.data = K;             # Otherwise change the value            else:                N.data = (N.data // K) * K;                               # Move to the next Node        N = N.next;          # Return the updated LL    return temp; # Function to print Nodes of# the Linked Listdef printList(N):       # Traverse the LL    while (N != None):         # Print Node's data        print(N.data , end="  ");        N = N.next;     # Driver Codeif __name__ == '__main__':       # Given Linked List    head = Node(3);    head.next = Node(5);    head.next.next = Node(8);    t = None;    t = EvalNearestMult(head, 3);     printList(t); # This code is contributed by gauravrajput1
// C# program for the above approachusing System; public class GFG{   // Structure of node  public    class node {    public    int data;    public    node next;     public    node(int d) {      data = d;    }  }   // Function to replace the node N  // by the nearest multiple of K  static node EvalNearestMult(node N, int K) {    node temp = N;     // Traverse the Linked List    while (N != null) {       // If data is less than K      if (N.data < K)        N.data = 0;       else {         // If the data of current        // node is same as K        if (N.data == K)          N.data = K;         // Otherwise change the value        else {          N.data = (N.data / K) * K;        }      }       // Move to the next node      N = N.next;    }     // Return the updated LL    return temp;  }   // Function to print the nodes of  // the Linked List  static void printList(node N) {    // Traverse the LL    while (N != null) {       // Print the node's data      Console.Write(N.data + "  ");      N = N.next;    }  }   // Driver Code  public static void Main(String[] args)  {     // Given Linked List    node head = new node(3);    head.next = new node(5);    head.next.next = new node(8);     node t = EvalNearestMult(head, 3);     printList(t);  }} // This code is contributed by gauravrajput1
<script>// Javascript program for the above approach // Structure of nodeclass node {         constructor()    {        this.data = 0;        this.next = null;    }}; // Function to replace the node N// by the nearest multiple of Kfunction EvalNearestMult(N, K){    var temp = N;    var t;     // Traverse the Linked List    while (N != null) {         // If data is less than K        if (N.data < K)            N.data = 0;         else {             // If the data of current            // node is same as K            if (N.data == K)                N.data = K;             // Otherwise change the value            else {                N.data = parseInt(N.data / K) * K;            }        }         // Move to the next node        N = N.next;    }     // Return the updated LL    return temp;} // Function to print the nodes of// the Linked Listfunction printList(N){    // Traverse the LL    while (N != null) {         // Print the node's data        document.write( N.data + "  ");        N = N.next;    }} // Driver Code// Given Linked Listvar head = null;var second = null;var third = null;head = new node();second = new node();third = new node();head.data = 3;head.next = second;second.data = 4;second.next = third;third.data = 8;third.next = null;var t = EvalNearestMult(head, 3);printList(t); // This code is contributed by rrrtnx. </script>
3  3  6
 
Time Complexity: O(N)Auxiliary Space: O(1)
dharanendralv23
rrrtnx
GauravRajput1
khushboogoyal499
Linked List
Mathematical
Linked List
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Circular Linked List | Set 2 (Traversal)
Swap nodes in a linked list without swapping data
Program to implement Singly Linked List in C++ using class
Circular Singly Linked List | Insertion
Given a linked list which is sorted, how will you insert in sorted way
Program for Fibonacci numbers
Write a program to print all permutations of a given string
C++ Data Types
Set in C++ Standard Template Library (STL)
Coin Change | DP-7