1)LinkedList.java
package llist;
import java.util.NoSuchElementException;
/**
A linked list is a sequence of nodes with efficient
element insertion and removal. This class
contains a subset of the methods of the standard
java.util.LinkedList class.
*/
public class LinkedList
{
private Node first;
/**
Constructs an empty linked list.
*/
public LinkedList()
{
first = null;
}
/**
Returns the first element in the linked list.
@return the first element in the linked list
*/
public Object getFirst()
{
if (first == null) { throw new NoSuchElementException(); }
return first.data;
}
/**
Removes the first element in the linked list.
@return the removed element
*/
public Object removeFirst()
{
if (first == null) { throw new NoSuchElementException(); }
Object element = first.data;
first = first.next;
return element;
}
/**
Adds an element to the front of the linked list.
@param element the element to add
*/
public void addFirst(Object element)
{
Node newNode = new Node();
newNode.data = element;
newNode.next = first;
first = newNode;
}
/**
Returns an iterator for iterating through this list.
@return an iterator for iterating through this list
*/
public ListIterator listIterator()
{
return new LinkedListIterator();
}
class Node
{
public Object data;
public Node next;
}
class LinkedListIterator implements ListIterator
{
private Node position;
private Node previous;
private boolean isAfterNext;
/**
Constructs an iterator that points to the front
of the linked list.
*/
public LinkedListIterator()
{
position = null;
previous = null;
isAfterNext = false;
}
/**
Moves the iterator past the next element.
@return the traversed element
*/
public Object next()
{
if (!hasNext()) { throw new NoSuchElementException(); }
previous = position; // Remember for remove
isAfterNext = true;
if (position == null)
{
position = first;
}
else
{
position = position.next;
}
return position.data;
}
/**
Tests if there is an element after the iterator position.
@return true if there is an element after the iterator position
*/
public boolean hasNext()
{
if (position == null)
{
return first != null;
}
else
{
return position.next != null;
}
}
/**
Adds an element before the iterator position
and moves the iterator past the inserted element.
@param element the element to add
*/
public void add(Object element)
{
if (position == null)
{
addFirst(element);
position = first;
}
else
{
Node newNode = new Node();
newNode.data = element;
newNode.next = position.next;
position.next = newNode;
position = newNode;
}
isAfterNext = false;
}
/**
Removes the last traversed element. This method may
only be called after a call to the next() method.
*/
public void remove()
{
if (!isAfterNext) { throw new IllegalStateException(); }
if (position == first)
{
removeFirst();
}
else
{
previous.next = position.next;
}
position = previous;
isAfterNext = false;
}
/**
Sets the last traversed element to a different value.
@param element the element to set
*/
public void set(Object element)
{
if (!isAfterNext) { throw new IllegalStateException(); }
position.data = element;
}
}
}
2)ListIterator.java
/**
A list iterator allows access of a position in a linked list.
This interface contains a subset of the methods of the
standard java.util.ListIterator interface. The methods for
backward traversal are not included.
*/
package llist;
public interface ListIterator
{
/**
Moves the iterator past the next element.
@return the traversed element
*/
Object next();
/**
Tests if there is an element after the iterator position.
@return true if there is an element after the iterator position
*/
boolean hasNext();
/**
Adds an element before the iterator position
and moves the iterator past the inserted element.
@param element the element to add
*/
void add(Object element);
/**
Removes the last traversed element. This method may
only be called after a call to the next() method.
*/
void remove();
/**
Sets the last traversed element to a different value.
@param element the element to set
*/
void set(Object element);
}
3)ListDemo.java
/**
A program that demonstrates the LinkedList class
*/
package llist;
public class ListDemo
{
public static void main(String[] args)
{
LinkedList staff = new LinkedList();
staff.addFirst("Tom");
staff.addFirst("Romeo");
staff.addFirst("Harry");
staff.addFirst("Diana");
// | in the comments indicates the iterator position
ListIterator iterator = staff.listIterator(); // |DHRT
iterator.next(); // D|HRT
iterator.next(); // DH|RT
// Add more elements after second element
iterator.add("Juliet"); // DHJ|RT
iterator.add("Nina"); // DHJN|RT
iterator.next(); // DHJNR|T
// Remove last traversed element
iterator.remove(); // DHJN|T
// Print all elements
iterator = staff.listIterator();
while (iterator.hasNext())
{
System.out.print(iterator.next() + " ");
}
System.out.println();
}
}
package llist;
import java.util.NoSuchElementException;
/**
A linked list is a sequence of nodes with efficient
element insertion and removal. This class
contains a subset of the methods of the standard
java.util.LinkedList class.
*/
public class LinkedList
{
private Node first;
/**
Constructs an empty linked list.
*/
public LinkedList()
{
first = null;
}
/**
Returns the first element in the linked list.
@return the first element in the linked list
*/
public Object getFirst()
{
if (first == null) { throw new NoSuchElementException(); }
return first.data;
}
/**
Removes the first element in the linked list.
@return the removed element
*/
public Object removeFirst()
{
if (first == null) { throw new NoSuchElementException(); }
Object element = first.data;
first = first.next;
return element;
}
/**
Adds an element to the front of the linked list.
@param element the element to add
*/
public void addFirst(Object element)
{
Node newNode = new Node();
newNode.data = element;
newNode.next = first;
first = newNode;
}
/**
Returns an iterator for iterating through this list.
@return an iterator for iterating through this list
*/
public ListIterator listIterator()
{
return new LinkedListIterator();
}
class Node
{
public Object data;
public Node next;
}
class LinkedListIterator implements ListIterator
{
private Node position;
private Node previous;
private boolean isAfterNext;
/**
Constructs an iterator that points to the front
of the linked list.
*/
public LinkedListIterator()
{
position = null;
previous = null;
isAfterNext = false;
}
/**
Moves the iterator past the next element.
@return the traversed element
*/
public Object next()
{
if (!hasNext()) { throw new NoSuchElementException(); }
previous = position; // Remember for remove
isAfterNext = true;
if (position == null)
{
position = first;
}
else
{
position = position.next;
}
return position.data;
}
/**
Tests if there is an element after the iterator position.
@return true if there is an element after the iterator position
*/
public boolean hasNext()
{
if (position == null)
{
return first != null;
}
else
{
return position.next != null;
}
}
/**
Adds an element before the iterator position
and moves the iterator past the inserted element.
@param element the element to add
*/
public void add(Object element)
{
if (position == null)
{
addFirst(element);
position = first;
}
else
{
Node newNode = new Node();
newNode.data = element;
newNode.next = position.next;
position.next = newNode;
position = newNode;
}
isAfterNext = false;
}
/**
Removes the last traversed element. This method may
only be called after a call to the next() method.
*/
public void remove()
{
if (!isAfterNext) { throw new IllegalStateException(); }
if (position == first)
{
removeFirst();
}
else
{
previous.next = position.next;
}
position = previous;
isAfterNext = false;
}
/**
Sets the last traversed element to a different value.
@param element the element to set
*/
public void set(Object element)
{
if (!isAfterNext) { throw new IllegalStateException(); }
position.data = element;
}
}
}
2)ListIterator.java
/**
A list iterator allows access of a position in a linked list.
This interface contains a subset of the methods of the
standard java.util.ListIterator interface. The methods for
backward traversal are not included.
*/
package llist;
public interface ListIterator
{
/**
Moves the iterator past the next element.
@return the traversed element
*/
Object next();
/**
Tests if there is an element after the iterator position.
@return true if there is an element after the iterator position
*/
boolean hasNext();
/**
Adds an element before the iterator position
and moves the iterator past the inserted element.
@param element the element to add
*/
void add(Object element);
/**
Removes the last traversed element. This method may
only be called after a call to the next() method.
*/
void remove();
/**
Sets the last traversed element to a different value.
@param element the element to set
*/
void set(Object element);
}
3)ListDemo.java
/**
A program that demonstrates the LinkedList class
*/
package llist;
public class ListDemo
{
public static void main(String[] args)
{
LinkedList staff = new LinkedList();
staff.addFirst("Tom");
staff.addFirst("Romeo");
staff.addFirst("Harry");
staff.addFirst("Diana");
// | in the comments indicates the iterator position
ListIterator iterator = staff.listIterator(); // |DHRT
iterator.next(); // D|HRT
iterator.next(); // DH|RT
// Add more elements after second element
iterator.add("Juliet"); // DHJ|RT
iterator.add("Nina"); // DHJN|RT
iterator.next(); // DHJNR|T
// Remove last traversed element
iterator.remove(); // DHJN|T
// Print all elements
iterator = staff.listIterator();
while (iterator.hasNext())
{
System.out.print(iterator.next() + " ");
}
System.out.println();
}
}
No comments:
Post a Comment