Craig
Craig

Reputation: 3

Java Polynomial singly Linked List Question

I have been trying to work on a linked list implementation I thought I had it nailed, but for some reason I can't work out how to add a new node to the list at the start of the list.

This was a polynomial addition method, everything else works as expected, but this section does not work as expected. It returns polynomial with no changes... I think I am missing something really simple but cant see it.

else if (power > polynomial.powerMax())
{

    Polynomial newlink = new Polynomial(coefficient,power);
    newlink.successor = polynomial; 
    polynomial = newlink;

}

Whole Method

    public class Polynomial 
    {
final static private int mantissa = 52;
final static private double epsilon = Math.pow(2.0, -mantissa);
private double coefficient = 0.0;
private int power = 0;
private Polynomial successor=null;



public Polynomial(double coefficient, int power)
{
    if (Double.isNaN(coefficient)) return;
    if (Math.abs(coefficient) < epsilon) return;
    if (power<0) return;
    this.coefficient=coefficient;
    this.power=power;
}

    public static void add(Polynomial polynomial, double coefficient, int power)
{
    if (polynomial == null) return;
    if (Math.abs(coefficient) < epsilon) coefficient = 0.0;
    if (coefficient == 0.0) return;
    if (power < 0) return;

    if (power < polynomial.powerMin())
      {
        Polynomial newNode = new Polynomial(coefficient,power);
        if (polynomial.successor != null)
        {
            while (polynomial.successor != null)
            {
                polynomial.successor = polynomial.successor.successor;
            }

            polynomial.successor = newNode;
        }

        else if (polynomial.successor == null )
            polynomial.successor = newNode;

      }
    else if (power > polynomial.powerMax())
    {

        Polynomial newlink = new Polynomial(coefficient,power);
        newlink.successor = polynomial; 
        polynomial = newlink;

    }

    else
    {
     if (power == polynomial.power)
         polynomial.coefficient = polynomial.coefficient + coefficient;

    }

}

Upvotes: 0

Views: 1173

Answers (1)

Leonard Br&#252;nings
Leonard Br&#252;nings

Reputation: 13222

In Java the references of variables are passed by value (link). That means if you assign anything new to the variable polynomial it will not have any effect outside of this method.

String x = "Foo";

public void change (String s) {
   s="Bar";
}

System.out.println(x);
change(x);
System.out.println(x);

Will print

Foo
Foo

You need to return the new Polynomial you created from the add method.

public static Polynomial add(Polynomial polynomial, double coefficient, int power) {
    ...
    return polynomial;
}

Upvotes: 2

Related Questions