Respuesta :
Answer:
public class CircularLinkedList {
Â
 public Node n1;
Â
 public static void main(String[] args) {
   CircularLinkedList c = new CircularLinkedList();
   c.callMethod();
 }
Â
 public void callMethod() {
   Node n1 = new Node(3,null);
   n1.next = n1;
   Node n2 = new Node(2,null);
   n2.next = n2;
   //as first root element is already created
   int[] n1Data = {9,12,15,19,21,23};
   int[] n2Data = {3,6,12,19};
   addMultipleData(n1,n1Data);
   addMultipleData(n2,n2Data);
   //printNode(n1);
   printNode(difference(n1,n2));
 }
Â
 public Node addData(Node root,Node n,int data) {
   Node temp = new Node(data,n.next);
   n.next = temp;
   return n.next;
 }
Â
 public Node addMultipleData(Node n,int... arr) {
   Node temp = null;
   for(int i = 0;i<arr.length;i++) {
     temp = new Node(arr[i],n.next);
     n.next = temp;
     n = temp;
   }
   return temp;
 }
Â
 //this is a method you are looking for
 public Node difference(Node rearL1,Node rearL2) {
   //return value
   Node differenceNode = null;
   Node i,j,k,l;
   i=j = rearL1;
   k=l=rearL2;
   Node differenceNodeRoot = differenceNode;
  Â
   boolean firstListCheckNeeded = false;
   int c1 = 0,c2 = 0;
   while(true) {
     while(k.data<i.data) {
       if(k==l && c2 != 0) {
         firstListCheckNeeded = true;
         break;
       }
       k = k.next;
       c2++;
     }
     //if the iner while loop breaks that means the second list has ended so no need to go further
     if(firstListCheckNeeded)break;
    Â
     if(k.data == i.data) {
       i = i.next;
       c1++;
       continue;
     }else {
       Node temp = new Node(i.data,differenceNodeRoot);
       if(differenceNode == null) {
         differenceNode = temp;
         temp.next = temp;
         differenceNodeRoot = temp;
       }else {
       differenceNode.next = temp;
       differenceNode = differenceNode.next;
       }
       i = i.next;
       c1++;
     }
     //check to see if we have reached the root
     if(i==j && c1 != 0) {
       //first list iteration complete
       break;
     }
     else if(k==l && c2 != 0) {
       firstListCheckNeeded = true;
       break;
     }
     //break;
   }
   if(firstListCheckNeeded) {
     while(i != j) {
       Node temp = new Node(i.data,differenceNodeRoot);
       if(differenceNode == null) {
         differenceNode = temp;
         temp.next = temp;
       }else {
       differenceNode.next = temp;
       differenceNode = differenceNode.next;
       }
       i = i.next;
     }
   }
   return differenceNode.next;
 }
Â
 public void printNode(Node n) {
   if(n == null) {
     System.out.println("Node is Empty");
   }
   Node i,j;
   i = j = n;
   System.out.println("Values");
   System.out.println(i.data);
   i = i.next;
   while(i!=j) {
     System.out.println(i.data);
     i = i.next;
   }
  Â
 }
 class Node {
   public int data;
   public Node next;
   public Node(int data,Node next) {
     this.data = data;
     this.next = next;
   }
 }
}
Explanation: