In: Computer Science
3- Use FirstLastList: Write method public void
join(FirstLastList SecondList) such that given two
linked lists, join them together to give one. So if the lists lst1=
[1,3,7,4] and lst2=[2,4,5,8,6], the result of lst1.join(lst2) is
lst1=[1,3,7,4,2,4,5,8,6] and lst2=[].
4- Use FirstLastList: Write method public void
swap(). It swaps the first and last elements of a
FirstLastList. So if lst1= [1,3,7,4], lst1.swap() = [4,3,7,1].
Display or throw an exception if the list contains less than two
elements.
public 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() throws Exception {
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) {
throw new Exception("There is not enough element in the
list.");
} else
{
long firstData = first.dData;
long lastData = last.dData;
first.dData = lastData;
last.dData = firstData;
}
}
}
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
public 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
I can't get FirstLastAppTest to work with my code. I can't post my FirstLastApp as I have limited space for 1 question.
PLEASE DO NOT MODIFY FirstLastAppTest!!! Its just for testing the code.
Below is corrected code. I have modified FirstLastList.java file and added comments where i modified the code. You can compare your code with this one to get better understanding. Let me know if you still have any problem or doubts. Thank you.
=====================================================================
FirstLastList.java
============================
public 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,
           first = last =
newLink; // newLink <-- last
       else
       {
           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 = last =
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) {
       /*
       * This implementation does not
empty otherList it still there holding
       * its memory space better use
delete method
       *
       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;
       */
       while(!otherList.isEmpty())
       {
           // remove first
element from other list and append it to current list
          
this.insertLast(otherList.deleteFirst());
       }
   }
  
   //
-------------------------------------------------------------
   public void swap() throws Exception {
       /*
       * No need to count elements we can
simply check for
       * First and Last to be equal for 1
element
       * and non null to be sure for
elements >= 2
       *
       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 (first == null || first ==
last)
           throw new
Exception("There is not enough element in the list.");
       else
       {
           long firstData =
first.dData;
           long lastData =
last.dData;
           first.dData =
lastData;
           last.dData =
firstData;
       }
   }
}
// inner class to represent link for list
class Link
{
   public long dData; // data item
   public Link next; // next link in list
  
   public Link(long d) // constructor
   {
       dData = d;
       // initialize next
       next = null;
   }
  
   public void displayLink() // display this link
   {
       System.out.print(dData + "
");
   }
} // end class Link
============================
FirstLastAppTest.java
============================
public 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()
       try { // swap throws exception must
include in try catch block
          
lst1.swap();
       } catch (Exception e) {
          
e.printStackTrace();
       }
       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
=====================================================================
