Merge two sorted linked list

import java.util.*;
class LinkedList {

private class Node {

	int data;
	Node next;
}

private Node head;
private Node tail;
private int size;

public int getFirst() throws Exception {
	if (this.size == 0)
		throw new Exception("linked list is empty");

	return head.data;
}

public int getLast() throws Exception {
	if (this.size == 0)
		throw new Exception("linked list is empty");

	return tail.data;
}

public void addLast(int item) {
	// create a new node
	Node nn = new Node();

	nn.data = item;
	nn.next = null;

	// update summary
	if (size == 0) {
		this.head = nn;
		this.tail = nn;
		size++;
	} else

	{
		this.tail.next = nn;
		this.tail = nn;

		size++;
	}

}

public void addFirst(int item) {
	Node nn = new Node();
	nn.data = item;
	nn.next = null;

	if (size == 0) {
		this.head = nn;
		this.tail = nn;
		size++;
	} else {
		nn.next = this.head;
		this.head = nn;
		size++;
	}

}

public int removeFirst() throws Exception {
	Node fn = this.head;

	if (this.size == 0)
		throw new Exception("linked list is empty");

	if (this.size == 1) {
		this.head = null;
		this.tail = null;
		size = 0;
	} else {
		Node np1 = this.head.next;
		this.head = np1;
		size--;
	}

	return fn.data;
}

public static Node merge_sorted_list(Node A,Node B) throws Exception {
	if(A == null) return B; 
    if(B == null) return A; 
      
    if(A.data < B.data)  
    { 
        A.next = merge_sorted_list(A.next, B); 
        return A; 
    } 
    else 
    { 
        B.next = merge_sorted_list(A, B.next); 
        return B; 
    } 
	
}

public void display() {

	Node temp = this.head;

	while (temp != null) {
		System.out.print(temp.data + " ");
		temp = temp.next;
	}

}

static Scanner scn = new Scanner(System.in);

public static void main(String[] args) throws Exception {
	// TODO Auto-generated method stub
	
	    int t = scn.nextInt();
	    
	    while(t > 0){

		    LinkedList list1 = new LinkedList();
		    int n1 = scn.nextInt();
		 
		    for (int j = 0; j < n1; j++) {
			    int item = scn.nextInt();
			    list1.addLast(item);
		}

            LinkedList list2 = new LinkedList();
		    int n2 = scn.nextInt();
		 
		    for (int j = 0; j < n2; j++) {
			    int item = scn.nextInt();
			    list2.addLast(item);
		}
		   LinkedList final= merge_sorted_list(list1.head,list2.head);
		   final.display;

        t--;
        }
	
}

}

cant get the desired output

there were some syntax error
dont use final as variable

hope this will help u
pls rate my work
pls

public static Node merge_sorted_list(Node A,Node B) throws Exception {
if(A == null) return B;
if(B == null) return A;

if(A.data < B.data)  
{ 
    A.next = merge_sorted_list(A.next, B); 
    return A; 
} 
else 
{ 
    B.next = merge_sorted_list(A, B.next); 
    return B; 
} 

}

public static void display(Node head) {

Node temp = head;

while (temp != null) {
	System.out.print(temp.data + " ");
	temp = temp.next;
}

}

static Scanner scn = new Scanner(System.in);

public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub

    int t = scn.nextInt();
    
    while(t > 0){

	    LinkedList list1 = new LinkedList();
	    int n1 = scn.nextInt();
	 
	    for (int j = 0; j < n1; j++) {
		    int item = scn.nextInt();
		    list1.addLast(item);
	}

        LinkedList list2 = new LinkedList();
	    int n2 = scn.nextInt();
	 
	    for (int j = 0; j < n2; j++) {
		    int item = scn.nextInt();
		    list2.addLast(item);
	}
	Node  fi=merge_sorted_list(list1.head,list2.head);
	   display(fi);

    t--;
    }

}
}