Write a method rotate that moves the value at the front of a linked list of integers to the end of the list. For example, if a variable called list stores the following sequence of values: [8, 23, 19, 7, 45, 98, 102, 4] Then the call of list, rotate ():should move the value 8 from the front of the list to the back of the list, yielding this sequence of values: [23, 19, 7, 45, 98, 102, 4, 8] The other values in the list should retain the same order as in the original list. If the method Is called for a list of 0 or 1 elements it should have no effect on the list. You are not allowed to construct any new nodes to solve this problem and you are not allowed to change any of the integer values stored in the nodes. You must solve the problem by rearranging the links of the list.
Expert Answer
MySingleLinkedList.java
public class MySingleLinkedList{
private MySLLNode head=null;
public static void main(String a[]){
MySingleLinkedList msl = new MySingleLinkedList();
int arList[] = {8,23,19,7,45,98,102,4};
for(int i=0;i<arList.length;i++)
msl.add(new MySLLNode(arList[i]));
msl.print();
msl.rotate();
msl.print();
msl.rotate();
msl.print();
}
//prints linked list
public void print(){
MySLLNode test = head;
while(test!=null){
System.out.print(” “+test.getData());
test = test.getNext();
}
System.out.println();
}
//rotates the linked list by one element
public void rotate(){
if(head==null)
return;
else if(head.getNext()==null)
return;
MySLLNode node = head,test;
head = head.getNext();
node.setNext(null);
test = head;
while(test.getNext()!=null){
test = test.getNext();
}
test.setNext(node);
}
//adds element to currently existing linked list.
public void add(MySLLNode node){
if(head==null){
head = node;
}
else{
MySLLNode test = head;
while(test.getNext()!=null){
test = test.getNext();
}
test.setNext(node);
}
}
}
MySLLNode.java
class MySLLNode{
private int data;
private MySLLNode next;
public MySLLNode(int data){
this.data = data;
next = null;
}
public MySLLNode(int data,MySLLNode next){
this.data = data;
this.next = next;
}
public int getData(){
return data;
}
public void setData(int data){
this.data = data;
}
public MySLLNode getNext(){
return next;
}
public void setNext(MySLLNode next){
this.next = next;
}
}