In: Computer Science
Suppose you are given two circularly linked lists, L and M.
Create an algorithm
for telling if L and M store the same sequence of elements (but
perhaps with
different starting points). Please provide a main()
function with it in Java to test it.
public class Test {
   public static void main(String[] args){
       CircularLinkedList list1 = new
CircularLinkedList();
       list1.append(6);
       list1.append(2);
       list1.append(3);
       list1.append(4);
       list1.append(5);
      
       CircularLinkedList list2 = new
CircularLinkedList();
       list2.append(2);
       list2.append(3);
       list2.append(4);
       list2.append(5);
       list2.append(6);
      
       list1.displayList();
       list2.displayList();
      
       System.out.println(" check
:"+checkSame(list1,list2));
      
       list1.append(3);
       list2.append(10);
       list1.displayList();
       list2.displayList();
       System.out.println(" check
:"+checkSame(list1,list2));
      
      
      
   }
  
   public static boolean checkSame(CircularLinkedList
l1,CircularLinkedList l2){
       if(l1.getCount() != l2.getCount())
return false;
       else{
           Node l1_start =
l1.getStartNode();
           Node l2_start =
l2.getStartNode();
           Node
n1=l1.getStartNode();
           Node
n2=l2.getStartNode();
           while(n2.link !=
l2_start){
          
    if(n2.data==n1.data){
          
        break;
          
    }
          
    n2=n2.link;
           }
           while(n1.link !=
l1_start){
          
    if(n1.data != n2.data){
          
        return false;
          
    }
          
    n1=n1.link;
          
    n2=n2.link;
           }
           return
true;
       }
   }
}
class Node{
    int data;
    public Node link;
    public Node(int data){
        this.data=data;
    }
    @SuppressWarnings("unused")
    public Node(int data,Node link){
        this.data=data;
        this.link=link;
    }
   }
class CircularLinkedList {
    private Node start;
    private int count;
    public void append(int x){
        count++;
        Node temp=new
Node(x);
        if(start==null){
           
start=temp;
        }else{
           
Node tp=start;
           
while(tp.link!=start){
               
tp=tp.link;
           
}
           
tp.link=temp;
        }
        temp.link=start;
    }
    public void addBeg(int x){
        count++;
        Node temp=new
Node(x);
        if(start==null){
           
temp.link=temp;
        }else{
           
Node tp=start;
           
while(tp.link!=start){
               
tp=tp.link;
           
}
           
tp.link=temp;
           
temp.link=start;
        }
        start=temp;
    }
    public void addAt(int pos,int x){
        Node temp,tp;
        temp=new Node(x);
        tp=start;
        for(int
i=0;i<pos;i++){
           
if(tp.link==start)
               
break;
           
tp=tp.link;
        }
        temp.link=tp.link;
        tp.link=temp;
        count++;
    }
    public void displayList(){
        if(start==null)
           
System.out.println("List is empty..");
        else{
        Node temp=start;
        System.out.print("[
");
       
while(temp.link!=start){
           
System.out.print(" "+temp.data+" ");
           
temp=temp.link;
        }
       
System.out.print(temp.data+" ]");
       
System.out.println();
    }
}
    public void deleteAt(int position){
        Node
current=start;
        Node
previous=start;
        for(int
i=0;i<position;i++){
           
if(current.link==start)
               
break;
           
previous=current;
           
current=current.link;
        }
       
System.out.print(current.data);
        if(position==0)
           
deleteFirst();
        else
           
previous.link=current.link;
        count--;
    }
    public Node getStartNode(){
       return start;
    }
    public void deleteFirst() {
        Node temp=start;
       
while(temp.link!=start){
           
temp=temp.link;
        }
       
temp.link=start.link;
        start=start.link;
        count--;
    }
    public int getCount(){
        return count;
    }
}