Linked List A linked list consists of a number of links, each of which has a reference to the next...
-
Upload
agustin-eliot -
Category
Documents
-
view
214 -
download
2
Transcript of Linked List A linked list consists of a number of links, each of which has a reference to the next...
![Page 1: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/1.jpg)
Linked List
• A linked list consists of a number of links, each of which has a reference to the next link.
• Adding and removing elements in the middle of a linked list is efficient.
• Visiting the elements of a linked list in sequential order is efficient
• Random access is not efficient
![Page 2: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/2.jpg)
linked list
![Page 3: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/3.jpg)
Java's LinkedList class
http://java.sun.com/j2se/1.4.2/docs/api/index.html
Some of the simpler methods:
o void addFirst(Object obj) o void addLast(Object obj)o Object getFirst() o Object getSecond() o Object removeFirst() o Object removeLast()
![Page 4: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/4.jpg)
listIterator provides a way to access all links: ListIterator listIterator(int index)
• listIterator method provides an object of type ListIterator ListIterator is an interface, so the return object from this method provides all the methods in this interface
ListIterator Interface: void add(Object o) boolean hasNext(), boolean hasPrev() Object next(), int nextIndex() Object previous(), int prevIndex() void remove(), void set(Object)
* provide a way to move forward thru list elements
![Page 5: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/5.jpg)
A ListIterator object
![Page 6: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/6.jpg)
hasNext() method ..
• hasNext returns true if there is a next element
LinkedList list = new LinkedList();
// other calls
ListIterator iterator = list.listIterator(0); if (iterator.hasNext())
………
![Page 7: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/7.jpg)
next() method ..
• The next method moves the iterator
ListIterator iterator = list.listIterator(0); if (iterator.hasNext())
iterator.next();
• next throws a NoSuchElementException if you are already past the end of the list
• The next method returns the object of the link that it is passing
while (iterator.hasNext()) {
Object obj = iterator.next(); Dog mydog = (Dog)obj;
mydog.draw();
} •
![Page 8: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/8.jpg)
other iterator methods.. • To move the list position backwards, use:
o hasPrevious o Previous
• The add method: o Adds an object after the iterator o Moves the iterator position past the new element iterator.add("Juliet");
• The remove method: o Removes ando Returns the object that was returned by the last call to next or
previous
![Page 9: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/9.jpg)
Adding and Removing from a LinkedList
• This loop removes all objects that fulfill a certain condition
while (iterator.hasNext()) {
Object obj = iterator.next(); if (obj fulfills condition) iterator.remove();
}
![Page 10: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/10.jpg)
File ListTest.java
• ListTest is a sample program that
o inserts elements into a list
o iterates through the list, adding and removing elements
o prints the list
![Page 11: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/11.jpg)
File ListTest.java01: import java.util.LinkedList;
02: import java.util.ListIterator;
03:
04: /**
05: A program that demonstrates the LinkedList class
06: */
07: public class ListTest
08: {
09: public static void main(String[] args)
10: {
11: LinkedList staff = new LinkedList();
12: staff.addLast("Dick");
13: staff.addLast("Harry");
14: staff.addLast("Romeo");
15: staff.addLast("Tom");
16:
17: // | in the comments indicates the iterator position
![Page 12: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/12.jpg)
18:
19: ListIterator iterator = staff.listIterator(); // |DHRT
20: iterator.next(); // D|HRT
21: iterator.next(); // DH|RT
22:
23: // add more elements after second element
24:
25: iterator.add("Juliet"); // DHJ|RT
26: iterator.add("Nina"); // DHJN|RT
27:
28: iterator.next(); // DHJNR|T
29:
30: // remove last traversed element
31:
32: iterator.remove(); // DHJN|T
33:
34: // print all elements
35:
36: iterator = staff.listIterator();
37: while (iterator.hasNext())
![Page 13: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/13.jpg)
38: System.out.println(iterator.next());
39: }
40: }
![Page 14: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/14.jpg)
Implementing Linked Lists • LinkedList class has a private inner class Link
class LinkedList {
private class Link {
public Object data; public Link next;
} }
![Page 15: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/15.jpg)
Implementing Linked Lists • LinkedList class
o Holds a reference first to the first link
o Has a method to get the first element
![Page 16: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/16.jpg)
Implementing Linked Lists class LinkedList {
public LinkedList() {
first = null; }
public Object getFirst() {
if (first == null) throw new
NoSuchElementException(); return first.data;
} . . . private Link first;
}
![Page 17: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/17.jpg)
Adding a New First Element
• When a new link is added to the list o It becomes the head of the list o The old first link becomes the next
link
![Page 18: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/18.jpg)
Adding a New First Element • The addFirst method
class LinkedList {
. . . public void addFirst(Object obj) {
Link newLink = new Link(); newLink.data = obj;
newLink.next = first; first = newLink;
} ...
}
![Page 19: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/19.jpg)
Adding a Link to the Head of a Linked List
![Page 20: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/20.jpg)
Removing the First Element
• When the first element is removed o The data of the first link are saved and later
returned as the method result
o The successor of the first link becomes the first link of the shorter list
o The link will be garbage collected when there are no further references to it
![Page 21: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/21.jpg)
Removing the First Element • The removeFirst method
class LinkedList { . . .
public Object removeFirst() {
if (first == null) throw new NoSuchElementException(); Object obj = first.data; first = first.next; return obj;
} . . .
}
![Page 22: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/22.jpg)
Removing the First Link from a Linked List
![Page 23: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/23.jpg)
LinkedListIterator
• Private inner class of LinkedList
• Implements a simplified ListIterator interface
• Has access to the first field and private Link class
![Page 24: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/24.jpg)
LinkedListIteratorThe LinkListIterator class
class LinkedList { . . .
public ListIterator listIterator() { return new LinkedListIterator(); } private class LinkedListIterator implements ListIterator { public LinkedListIterator() {
position = null; previous = null;
} . . . private Link position; private Link previous;
} . . .
}
![Page 25: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/25.jpg)
LinkListIterator's next Method • position reference is advances to position.next
• Old position is remembered as previous
• If the iterator points before the first element of the list, then the old position is
null and position must be set to first
![Page 26: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/26.jpg)
LinkListIterator's next Method private class LinkedListIterator implements ListIterator { . . .
public Object next() { if (!hasNext())
throw new NoSuchElementException(); previous = position; // remember for remove if (position == null)
position = first; else
position = position.next; return position.data; } . . .
}
![Page 27: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/27.jpg)
LinkListIterator's hasnext Method
• The next method should only be called when the iterator is not at the end of the list
• The iterator is at the end
o if the list is empty (first == null)
o if there is no element after the current position (position.next == null)
![Page 28: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/28.jpg)
LinkListIterator's hasnext Method
private class LinkedListIterator implements ListIterator {
. . . public boolean hasNext() {
if (position == null) return first != null;
else return position.next != null;
}
}
![Page 29: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/29.jpg)
LinkListIterator's remove Method
• If the element to be removed is the first element, call removeFirst
• Otherwise, the link proceeding the element to be removed needs to have its next reference updated to skip the removed element
• If the previous reference is null:
o this call does not immediately follow a call to next
o throw an IllegalArgumentException
• Set previous reference to null
![Page 30: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/30.jpg)
LinkListIterator's remove Method private class LinkedListIterator implements ListIterator { . . .
public void remove() { if (position == first)
{ removeFirst(); position = first; }
else {
if (previous == null) throw new IllegalStateException();
previous.next = position.next; position = previous;
} previous = null; }
. . . }
![Page 31: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/31.jpg)
Removing a Link From the Middle of a Linked List
![Page 32: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/32.jpg)
LinkListIterator's set Method • Changes the data stored in the previously visited
element • The set method
private class LinkedListIterator implements ListIterator{ . . .
public void set(Object obj) { if (position == null) throw new NoSuchElementException(); position.data = obj; } . . .
}
![Page 33: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/33.jpg)
LinkListIterator's add Method
• Inserts the new link after the current position
• Sets the successor of the new link to the successor of the current position
![Page 34: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/34.jpg)
LinkListIterator's add Method private class LinkedListIterator implements ListIterator{ . . . public void add(Object obj) { if (position == null) { addFirst(obj); position = first; } else { Link newLink = new Link(); newLink.data = obj; newLink.next = position.next; position.next = newLink; position = newLink; } previous = null; } . . .}
![Page 35: Linked List A linked list consists of a number of links, each of which has a reference to the next link. Adding and removing elements in the middle of.](https://reader036.fdocuments.us/reader036/viewer/2022070306/5518d033550346b31f8b5c57/html5/thumbnails/35.jpg)
Adding a Link to the Middle of a Linked List