¿Cómo verificar si una lista vinculada es un palíndromo o no en Java?

Escribí un código para verificar si una lista vinculada individualmente es un palíndromo. E hice dos pasos:

1er. invierta la lista original vinculada.

2do. Compruebe si la lista enlazada original e inversa tiene el mismo elemento.

    public static Boolean isPalindrome(Node input){
        Node reversed= reverse(input);
        while (input!=null){
            if(input.item!=reversed.item)
                return false;
            input=input.next;
            reversed=reversed.next;
            }
            return true;
    }
    static Node head;
    public static Node reverse(Node input){
        if(input==null || input.next==null){
            head=input;
            return input;
        }
        else{
            reverse(input.next);
            input.next.next=input;
            input.next=null;
            return head;
        }
    }

Este programa funciona Pero pensé, cuando ejecutaba el método inverso, ya que se pasa el encabezado de la lista vinculada original, por lo que la lista vinculada original también podría cambiar, por lo que el isPalindrome también debería ser verdadero, ¿verdad? ¿Estoy en lo cierto o me puede decir si entendí mal algún concepto? Gracias

Esta es la función principal y cómo uso ese código:

public static void main(String [] args){
    Node a=new Node(9);
    Node b=new Node(8);
    Node c=new Node(7);
    Node d=new Node(6);
    a.next=b;
    b.next=c;
    c.next=d;
    //d.next=c;
    Boolean tf=isPalindrome(a);
    if (tf)
        System.out.println("Is Palindrome!");
    else
        System.out.println("Not Palindrome");
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta