I have a project I am working on which require the implementation of circular likened list without the use of an API. I did most part of the code but for some reasons I cannot get the output I am looking for. I am kindly requesting anyone who can help me out to fix the problem. One specific problem is that I cannot put the pointer to start iterating from the key I found in the find method. e.g. if the array elements are 10 , 9 ,8 ,5,6. if I pass 8 as argument to the find method, if found it, it should display as 8,5,6,10, 9 etc. otherwise leave the elements as it is.
Below is the code I have ready and PLEASE see the output right beneath it, I guess that will help you to figure out what i am looking for specifically. Pay close attention to my insert, find, step method. thank you in advance!`
//LinkFirstLast Classs
class LinkFirstLast {
public long theData;
public LinkFirstLast next;
public LinkFirstLast last;
public LinkFirstLast previous;
public LinkFirstLast() {
}
public LinkFirstLast(int data) {
theData =data;
}
public void displayLink(){
System.out.print(theData+ " ");
}
}
// Circular linklist class//////////////////
class CircList {
private LinkFirstLast first, last;
int nItems;
//Constructor
public CircList(){
last = null;
}
//Creates a node and inserts new data
public void insert(int data) {
LinkFirstLast newLink = new LinkFirstLast(data);
if(isEmpty()){
last = newLink;
// first = newLink;
}
else{
first.previous = newLink;
}
newLink.next = first;
first = newLink;
//last.next = first;
// first.previous = last;
nItems++;
}
public void displayList() {
LinkFirstLast current = first;
while(current != null){
current.displayLink();
current =current.next;
}
System.out.println("");
}
public LinkFirstLast find(int key) {
LinkFirstLast current = first;
while(current != null && current.theData != key){
if(current.theData == key){
first = current;
first = current.next;
last.next = first;
}
else{
current = current.next;
}
}
/*
first.previous = newLink;
newLink.next = first;
first = newLink;
LinkFirstLast current = first;
while(current != null && current.theData != key )
{
current = current.next;
}
*/
return current;
}
public LinkFirstLast delete() {
LinkFirstLast current;
current = first;
while(first.next == null){
last = null;
}
first = first.next;
return current;
}
public int getSize() {
return nItems;
}
public void step() {
System.out.print("List: ");
if(first != null && first.next !=null){
first.next= first.next;
}
}
//Checks if linkedlist has no item
public boolean isEmpty() {
return (nItems==0);
}
public LinkFirstLast delete(int key) {
LinkFirstLast current = first;
LinkFirstLast previous = first;
while(current.theData != key)
{
if(current.next == null)
return null;
else
{
previous = current;
current = current.next;
}
}
if(current == first)
first = first.next;
else
previous.next = current.next;
nItems--;
return current;
}
// -------------------------------------------------------------
}
// main
class Pro {
public static void main(String[] args)
{
LinkFirstLast f, d;
CircList theList = new CircList(); // make list
theList.insert(10); // insert items
theList.insert(20);
theList.insert(30);
theList.insert(40);
theList.insert(50);
theList.insert(60);
theList.insert(70);
theList.displayList();
f = theList.find(30);
if( f != null){
System.out.println("Found link with key " + f.theData);
}
else{
System.out.println("Can't find link with key 30");
}
theList.displayList(); // display list
System.out.println("Inserting link with key 80");
theList.insert(80);
theList.displayList(); // display list
d = theList.delete(60); // delete item
if( d != null )
System.out.println("Deleted link with key " + d.theData);
else
System.out.println("Can't delete link with key 60");
theList.displayList(); // display list
f = theList.find(99); // find item
if( f != null){
System.out.println("Found link with key " + f.theData);}
else
System.out.println("Can't find link with key 99" );
theList.displayList(); // display list
d = theList.delete(13); // delete item
if( d != null )
System.out.println("Deleted link with key " + d.theData);
else
System.out.println("Can't delete link with key 13");
theList.displayList(); // display list
System.out.println("Stepping through list");
for(int j=0; j<theList.getSize(); j++)
{
theList.step();
theList.displayList();
}
System.out.println("Will delete and step one by one");
while(theList.isEmpty() == false)
{
theList.delete();
theList.step();
theList.displayList();
}
} // end main()
} // end class CircApp
The output is:
List: 70 60 50 40 30 20 10
Found link with key 30
List: 30 20 10 70 60 50 40
Inserting link with key 80
List: 80 30 20 10 70 60 50 40
Deleted link with key 60
List: 50 40 80 30 20 10 70
Can't find link with key 99
List: 50 40 80 30 20 10 70
Can't delete link with key 13
List: 50 40 80 30 20 10 70
Stepping through list
List: 40 80 30 20 10 70 50
List: 80 30 20 10 70 50 40
List: 30 20 10 70 50 40 80
List: 20 10 70 50 40 80 30
List: 10 70 50 40 80 30 20
List: 70 50 40 80 30 20 10
List: 50 40 80 30 20 10 70
Will delete and step one by one
List: 80 30 20 10 70 40
List: 20 10 70 40 30
List: 70 40 30 10
List: 30 10 40
List: 40 10
List: 10
List:
keynode and assign it the head node.If the key isn't found, just leave the head where it is. I hope that'd work for you.