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
=====================================================================