Open In App

Java Program For Adding Two Polynomials Using Linked List

Last Updated : 04 Mar, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given two polynomial numbers represented by a linked list. Write a function that add these lists means add the coefficients who have same variable powers.
Example:  

Input:
     1st number = 5x2 + 4x1 + 2x0
     2nd number = -5x1 - 5x0
Output:
        5x2-1x1-3x0
Input:
     1st number = 5x3 + 4x2 + 2x0
     2nd number = 5x^1 - 5x^0
Output:
        5x3 + 4x2 + 5x1 - 3x0

Addition-of-two-polynomial

Java




import java.io.*;
import java.util.Scanner;
class Polynomial
{
    public static Node addPolynomial(Node p1,
                                     Node p2)
    {
        Node a = p1, b = p2,
             newHead = new Node(0, 0),
             c = newHead;
 
        while (a != null || b != null)
        {
            if (a == null)
            {
                c.next = b;
                break;
            }
            else if (b == null)
            {
                c.next = a;
                break;
            }
 
            else if (a.pow == b.pow)
            {
                c.next = new Node(a.coeff +
                                  b.coeff, a.pow);
                a = a.next;
                b = b.next;
            }
 
            else if (a.pow > b.pow)
            {
                c.next = new Node(a.coeff,
                                  a.pow);
                a = a.next;
            }
 
            else if (a.pow < b.pow)
            {
                c.next = new Node(b.coeff,
                                  b.pow);
                b = b.next;
            }
            c = c.next;
        }
        return newHead.next;
    }
}
 
// Utilities for Linked List
// Nodes
class Node
{
    int coeff;
    int pow;
    Node next;
    Node(int a, int b)
    {
        coeff = a;
        pow = b;
        next = null;
    }
}
 
// Linked List main class
class LinkedList
    public static void main(String args[])
    {
        Node start1 = null, cur1 = null,
             start2 = null, cur2 = null;
        int[] list1_coeff = {5, 4, 2};
        int[] list1_pow = {2, 1, 0};
        int n = list1_coeff.length;
 
        int i = 0;
        while (n-- > 0)
        {
            int a = list1_coeff[i];
            int b = list1_pow[i];
            Node ptr = new Node(a, b);
            if (start1 == null)
            {
                start1 = ptr;
                cur1 = ptr;
            }
            else
            {
                cur1.next = ptr;
                cur1 = ptr;
            }
            i++;
        }
 
        int[] list2_coeff = {-5, -5};
        int[] list2_pow = {1, 0};
        n = list2_coeff.length;
 
        i = 0;
        while (n-- > 0)
        {
            int a = list2_coeff[i];
            int b = list2_pow[i];
 
            Node ptr = new Node(a, b);
 
            if (start2 == null)
            {
                start2 = ptr;
                cur2 = ptr;
            }
            else
            {
                cur2.next = ptr;
                cur2 = ptr;
            }
            i++;
        }
 
        Polynomial obj = new Polynomial();
        Node sum = obj.addPolynomial(start1,
                                     start2);
        Node trav = sum;
        while (trav != null)
        {
            System.out.print(trav.coeff +
                             "x^" + trav.pow);
            if (trav.next != null)
                System.out.print(" + ");
            trav = trav.next;
        }
        System.out.println();
    }
}


Output:

1st Number: 5x^2+4x^1+2x^0
2nd Number: -5x^1-5x^0
Added polynomial: 5x^2-1x^1-3x^0

Time Complexity: O(m + n) where m and n are number of nodes in first and second lists respectively.
Auxiliary Space: O(max(m,n) as it is using extra space for resultant linked list.

Please refer complete article on Adding two polynomials using Linked List for more details!



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads