Null pointer exception in iterating and unable to search a node. The delete and replace methods are the ones that have problems
<pre><code>import javax.swing.*;
import java.io.*;

class MyDatabase implements Database {
Node head = null, tail = null, rover = null;
String ako;
File myFile = new File("sample.dat");
Node n = new Node();
Node current; Node p;
Node x = new Node();


    public void insert(Node myNewNode) {
        if (head == null){ 
            head = myNewNode;
            head.next = null;
        } 
        else {
            tail = head;
            while(tail.next != null)
                tail = tail.next;
            tail.next = myNewNode;
            myNewNode.next = null;
        }
        current = head;
    }

    public boolean delete(Node nodeToDelete) {  
            //the delete and replace methods are the ones that have problems
            current = head;

            p = head;

            head = null;
            //here, no matter what you enter, this if statement is never executed. Yes, never. even if they are equal.
            if(nodeToDelete.title == head.title) {
                head = head.next;
                return true;
            }
            else{
                while(current != nodeToDelete) 
                    current = current.next;//Null Pointer exception here        
                while(p.next != nodeToDelete)
                    p = p.next;//Null Pointer exception here
                current = current.next;
                p = current;
            }
            current = head;//this is for listIterator purposes. 

            return true;
    }

    public boolean replace(Node nodeToReplace, Node myNewNode) {
            //the delete and replace methods are the ones that have problems
            //here i tested if the head.title and nodeToReplace.title have values
            //the println correctly prints the value that I input

        current = head;
        String s = head.title;// for example i entered "max"
        String s1 = nodeToReplace.title;// i also entered "max"
        System.out.println(s);//prints out "max"
        System.out.println(s1);// prints out "max"

        if(s == s1) { // if statement is not executed. Note: i entered the same string.
                myNewNode.next = head.next;
                head = myNewNode;       
        }
        else {
        while(current != null) {
            String s2 = current.title;
            if(s2 == s1) {
                current = new Node(myNewNode);
            }
        }
        }
        current = head;
        return true;

    }


    public Node search(Node nodeToSearch) {
        current = head;
        while(current != null) {
            if(current == nodeToSearch) {
                Node p = new Node(current);
                current = head;
                return p;
            }
        }
        return null;
    }

    public boolean saveToFile(String filename) throws Exception {
        Node p = new Node();
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(myFile));
        out.writeObject(p);
        out.close();
        return true;
    }

    public boolean loadFromFile(String filename) throws Exception {
        ObjectInputStream in = new ObjectInputStream(new FileInputStream(myFile));
        head = (Node) in.readObject(); 

        return true;
    }

    public Node listIterator() {

        try{
            if(current == head) {
                rover = current;
                current = current.next;
                return rover;
            }
            else {
                rover = current;
                current = current.next;
                Node p = new Node(rover);
                return p;
            }
        }
        catch(NullPointerException e) {
            current = head;
            return null;
        }
    }   

    public Node listIterator2() {

        try{
            if(current == head) {
                rover = current;
                current = current.next;
                return rover;
            }
            else {
                rover = current;
                current = current.next;
                return rover;
            }
        }
        catch(NullPointerException e) {
            current = head;
            return null;
        }
    }   

    public boolean equals(Database db) {
        Node p;
        while(rover != null) {
            p = head;
            while(p != null) {
                if(rover != p)
                return false;
                p = p.next; 
            }
            rover = rover.next;
        }
        return true;
    }

    public String whoIAm() {
        ako = "Michael Glenn R. Roquim Jr. !";
        return ako;
    }
}
</code></pre>
