In: Computer Science
java.lang.NullPointerException
at FirstLastList.swap(FirstLastList.java:85)
at FirstLastAppTest.main(FirstLastAppTest.java:32)
Plese correct this error
class FirstLastAppTest.Java is for testing purposes and not for editing.
class FirstLastAppTest
{
public static void main(String[] args)
{
FirstLastList lst1 = new FirstLastList(); // Start a new
FirstLastList called lst1
lst1.insertLast(1); // Add links with data to the last
position
lst1.insertLast(3);
lst1.insertLast(7);
lst1.insertLast(4);
System.out.print("\nlst1: "); // print the description for the
list
lst1.displayList(); // print the contents of the list
FirstLastList lst2 = new FirstLastList(); // Start a new FirstLastList called lst2
lst2.insertLast(2); // Add links with data to the last
position
lst2.insertLast(4);
lst2.insertLast(5);
lst2.insertLast(8);
lst2.insertLast(6);
System.out.print("\nlst2: "); // print the description for the
list
lst2.displayList(); // print the contents of the list
System.out.print("\nlst1.join(lst2): "); // print the action to
take place: lst1.join(lst2)
lst1.join(lst2); // call the join method for lst1 to add lst2
System.out.print("\nlst1: "); // print the description for the
list
lst1.displayList(); // print the contents of the list lst1; post
join()
System.out.print("lst2: "); // print the description for the
list
lst2.displayList(); // print the contents of the list lst2; post
join()
System.out.print("\nlst1.swap(): "); // print the action to take
place: lst1.swap()
lst1.swap(); // call the swap method for lst1
System.out.print("\nlst1: "); // print the description for the
list
lst1.displayList(); // print the contents of the list lst1; post
swap()
} // end main()
} // end class
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
class FirstLastList
{
private Link first; // ref to first link
private Link last; // ref to last link
//
-------------------------------------------------------------
public FirstLastList() // constructor
{
first = null; // no links on list yet
last = null;
}
//
-------------------------------------------------------------
public boolean isEmpty() // true if no links
{ return first==null; }
//
-------------------------------------------------------------
public void insertFirst(long dd) // insert at front of list
{
Link newLink = new Link(dd); // make new link
if( isEmpty() ) // if empty list,
last = newLink; // newLink <-- last
newLink.next = first; // newLink --> old first
first = newLink; // first --> newLink
}
//
-------------------------------------------------------------
public void insertLast(long dd) // insert at end of list
{
Link newLink = new Link(dd); // make new link
if( isEmpty() ) // if empty list,
first = newLink; // first --> newLink
else
last.next = newLink; // old last --> newLink
last = newLink; // newLink <-- last
}
//
-------------------------------------------------------------
public long deleteFirst() // delete first link
{
// (assumes non-empty list)
long temp = first.dData;
if(first.next == null) // if only one item
last = null; // null <-- last
first = first.next; // first --> old next
return temp;
}
//
-------------------------------------------------------------
public void displayList()
{
System.out.print("List (first-->last): ");
Link current = first; // start at beginning
while(current != null) // until end of list,
{
current.displayLink(); // print data
current = current.next; // move to next link
}
System.out.println("");
}
//
-------------------------------------------------------------
public void join(FirstLastList otherList)
{
Link current = otherList.first; // start at beginning
while(current != null) // until end of list,
{
this.insertLast(current.dData);
current = current.next; // move to next link
}
otherList.first=null;
}
public void swap()
{
int count = 0;
Link current = first; // start at beginning
while(current != null) // until end of list,
{
count++;
current = current.next; // move to next link
if(count < 2)
{
System.out.println("There is not enough element in the
list.");
}
else
{
long firstData = first.dData; // store the data of the first
node
long lastData = current.dData; // please use current object of the
Link class / store the data of last node
first.dData = lastData; // swap
current.dData = firstData; // swap
}
}
}
}
class Link
{
public long dData; // data item
public Link next; // next link in list
//
-------------------------------------------------------------
public Link(long d) // constructor
{ dData = d; }
//
-------------------------------------------------------------
public void displayLink() // display this link
{ System.out.print(dData + " "); }
//
-------------------------------------------------------------
} // end class Link
////////////////////////////////////////////////////////////////
class FirstLastApp
{
public static void main(String[] args)
{ // make a new list
FirstLastList lst1 = new FirstLastList();
lst1.insertFirst(1);
lst1.insertLast(3);
lst1.insertLast(7);
lst1.insertLast(4);
System.out.print("List 1 is : ");
lst1.displayList();
FirstLastList lst2 = new FirstLastList();
lst2.insertFirst(2);
lst2.insertLast(4);
lst2.insertLast(5);
lst2.insertLast(8);
lst2.insertLast(6);
System.out.print("\nList 2 is : ");
lst2.displayList();
lst1.join(lst2);
System.out.print("\nAfter joining List 1 is : ");
lst1.displayList();
System.out.print("\nList 2 is : ");
lst2.displayList();
try
{
lst1.swap();
System.out.println("\nAfter swap the list 1 is : ");
lst1.displayList();
lst2.swap();
System.out.println("\nAfter swap the list 2 is : ");
lst2.displayList();
}
catch(Exception e)
{
System.out.println( "Exception:" + e);
}
} // end main()
} // end class FirstLastAppd
so swap method works after both the queues have been merged, the first and last element swap places. in this case 1 & 8 should swap places.
Following is the method, which needs fixes in FirstLastList.java :
public void swap()
{
int count = 0;
Link current = first; // start at beginning
/*
* First ensure there there are at least 2 elements.
*/
while(current != null) // until end of list,
{
count++;
current = current.next; // move to next link
}
if(count < 2)
{
/*
* Display message, that we do not have enough elements.
*/
System.out.println("There is not enough element in the list.");
}
else
{
/*
* Swap the first and last element values.
*/
long firstData = first.dData; // store the data of the first node
long lastData = last.dData; // store the data of last node
first.dData = lastData; // swap
last.dData = firstData; // swap
}
}
Following is the run, when FirstLastAppTest.java is run as main :
lst1: List (first-->last): 1 3 7 4
lst2: List (first-->last): 2 4 5 8 6
lst1.join(lst2):
lst1: List (first-->last): 1 3 7 4 2 4 5 8 6
lst2: List (first-->last):
lst1.swap():
lst1: List (first-->last): 6 3 7 4 2 4 5 8 1