* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Linked Lists
		                    
		                    
								Survey							
                            
		                
		                
                            
                            
								Document related concepts							
                        
                        
                    
						
						
							Transcript						
					
					Chapter 16: Linked Lists
Java Programming:
Program Design Including Data Structures
Linked Lists
 Linked list
 List of items, called nodes
 The order of the nodes is determined by the address,
called the link, stored in each node
 Every node (except the last node) contains the
address of the next node
 Components of a node
 Data: stores the relevant information
 Link: stores the address of the next node
Java Programming: Program Design Including Data Structures
2
Linked Lists
Class…
Interface…
Interface…
Interface…
Object
Iterable
Cloneable
Serializable
Class…
Interface…
AbstractCollection
Collection
Class…
Interface…
Interface…
AbstractList
List
Queue
Class…
Interface…
AbstractSequentialList
Deque
Class…
LinkedList
COSC 237
© R.G. Eyer , 2012
3
Linked Lists (continued)
Figure 16-1 Structure of a node
Figure 16-2 Linked list
Java Programming: Program Design Including Data Structures
4
Linked Lists (continued)
 Head or first
 Holds the address of the first node in the list
 The info part on the node can be either a value of a
primitive type or a reference to an object
 Class Node
 Represents nodes on a list
 It has two instance variables
 info (of type int, but it can be any other type)
 link (of type Node)
Java Programming: Program Design Including Data Structures
5
Linked Lists (continued)
 Class Node
public class Node
{
public int info;
public Node link;
}
 Notice that instance variables of the class Node are
declared as public
Java Programming: Program Design Including Data Structures
6
Linked List: Properties
Figure 16-4 Linked list with four nodes
7
Linked List: Properties
Figure 16-5 Linked list after current = head; executes
Java Programming: Program Design Including Data Structures
8
Linked List: Properties
 Consider the statement current = current.link;
Figure 16-6 After the statement current = current.link; executes
Java Programming: Program Design Including Data Structures
9
Traversing a Linked List
 Basic operations of a linked list that require the link
to be traversed
 Search the list for an item
 Insert an item in the list
 Delete an item from the list
 You cannot use head to traverse the list
 You would lose the nodes of the list
 Use another reference variable of the same type as
head: current
Java Programming: Program Design Including Data Structures
10
Traversing a Linked List
 The following code traverses the list
current = head;
while (current != null) {
//Process current
current = current.link;
}
Java Programming: Program Design Including Data Structures
11
Traversing a Linked List
 The following code outputs the data stored in each
node
current = head;
while (current != null) {
System.out.println(current.info + “ “);
current = current.link;
}
Java Programming: Program Design Including Data Structures
12
Item Insertion and Deletion
 Consider the following definition of a node
public class Node {
public int info;
public Node link;
}
 And the following variable declaration
Node head, p, q, newNode;
Java Programming: Program Design Including Data Structures
13
Insertion
 Consider the following linked list
Figure 16-7 Linked list before item insertion
 You want to create a new node with info 50 and
insert it after p
Java Programming: Program Design Including Data Structures
14
Insertion (continued)
 The following statements create and store 50 in the
info field of a new node
newNode = new Node();
newNode.info = 50;
//create newNode
//store 50 in the new node
Figure 16-8 Create newNode and store 50 in it
Java Programming: Program Design Including Data Structures
15
Insertion (continued)
 The following statements insert the node in the
linked list at the required place
newNode.link = p.link;
p.link = newNode;
 The sequence of statements to insert the node is very
important
 If you reverse the sequence of the statements, you
will not get the desired result
Java Programming: Program Design Including Data Structures
16
Insertion (continued)
Figure 16-9 List after the statement
newNode.link = p.link; executes
Figure 16-10 List after the statement
p.link = newNode; executes
Java Programming: Program Design Including Data Structures
17
Insertion (continued)
 Using two reference variables, you can simplify the
code somewhat
 Consider the following
Figure 16-12 List with reference variables p and q
Java Programming: Program Design Including Data Structures
18
Insertion (continued)
 The following code inserts newNode between p & q
newNode.link = q;
p.link = newNode;
or
p.link = newNode;
newNode.link = q;
 The order in which these statements execute does not
matter
Java Programming: Program Design Including Data Structures
19
Insertion (continued)
Figure 16-13 List after the statement
p.link = newNode; executes
Figure 16-14 List after the statement
newNode.link = q; executes
Java Programming: Program Design Including Data Structures
20
Deletion
 Consider the following linked list
Figure 16-15 Node to be deleted is with info 34
 You want to delete node with info 34
Java Programming: Program Design Including Data Structures
21
Deletion (continued)
 The following statement removes the nodes from the
list
p.link = p.link.link
Figure 16-16 List after the statement
p.link = p.link.link; executes
Java Programming: Program Design Including Data Structures
22
Deletion (continued)
 Previous statement removed the node
 However, the memory may still be occupied by this
node
 System’s automatic garbage collector reclaims
memory occupied by unreferenced nodes
 Use System.gc(); to run the garbage collector
Java Programming: Program Design Including Data Structures
23
Deletion (continued)
 Using two reference variables, you can simplify the
code somewhat
 Consider the following statements
q = p.link;
p.link = q.link;
q = null;
System.gc();
Java Programming: Program Design Including Data Structures
24
Deletion (continued)
Figure 16-17 List after the statement
q = p.link; executes
Figure 16-18 List after the statement
p.link = q.link; executes
Java Programming: Program Design Including Data Structures
25
Building a Linked List
 You can build a list in two ways: forward or
backward
 Forward manner
 A new node is always inserted at the end of the linked
list
 Backward manner
 A new node is always inserted at the beginning of the
linked list
Java Programming: Program Design Including Data Structures
26
Building a Linked List Forward
 You need three reference variables
 One to point to the front of the list
 Cannot be moved
 One to point to the last node of the list
 One to create the new node
 Next two slides show the code for creating a linked
list forward
Java Programming: Program Design Including Data Structures
27
Building a Linked List Forward
Node buildListForward() {
Node first, newNode, last;
int num;
System.out.println(“Enter integers ending with -999:”);
num = console.nextInt();
first = null;
while (num != -999) {
newNode = new Node();
newNode.info = num;
newNode.link = null;
if (first == null) {
first = newNode;
last = newNode;
} else {
last.link = newNode;
last = newNode;
}
num = console.nextInt();
} // end while
return first;
} // end buildListForward
Java Programming: Program Design Including Data Structures
28
Building a Linked List Backward
 You only need two reference variables
 One to point to the front of the list
 Changes each time a new node is inserted
 One to create the new node
 Next slide shows the code for creating a linked list
backward
Java Programming: Program Design Including Data Structures
29
Building a Linked List Backward
Node buildListBackward() {
Node first, newNode;
int num;
System.out.println(“Enter integers ending with -999:”);
num = console.nextInt();
first = null;
while (num != -999) {
newNode = new Node();
// create a node
newNode.info = num;
// store the data in newNode
newNode.link = first;
// put newNode at front of list
first = newNode;
// update the head of the list
num = console.nextInt(); // get the next number
}
return first;
} // end buildListBackward
Java Programming: Program Design Including Data Structures
30
Linked List as an ADT
Figure 16-27 UML class diagram of the interface LinkedListADT
Java Programming: Program Design Including Data Structures
31
Linked List as an ADT (continued)
 There are two types of linked lists: sorted and
unsorted
 The algorithms to implement some of the operations
differ for sorted and unsorted lists
 Therefore, define the LinkedListClass as an
abstract class
 LinkedListClass has two derived classes
 UnorderedLinkedList
 OrderedLinkedList
Java Programming: Program Design Including Data Structures
32
Structure of Linked List Nodes
 Each node of a linked list must keep track of the data
as well as the next node in the list
 The node has two instance variables
 Define the class LinkedListNode as an inner
class of LinkedListClass
 Simplify operations such as insert and delete
 LinkedListNode is defined as protected and
generic
Java Programming: Program Design Including Data Structures
33
Structure of Linked List Nodes
(continued)
Figure 16-28 UML class diagram of the class LinkedListNode
and the outer-inner class relationship
Java Programming: Program Design Including Data Structures
34
Instance Variables of the Class
LinkedListClass
 Instance variables
protected LinkedListNode<T> first; // variable to store the
// address of the first
// node of the list
protected LinkedListNode<T> last; // variable to store the
// address of the last
// node of the list
protected int count; // variable to store the number of
// nodes in the list
Java Programming: Program Design Including Data Structures
35
Linked List Iterators
 An iterator is an object that produces each element of
a collection one element at a time
 An iterator has at least two methods: hasNext and
next
 hasNext
 Determines whether there is a next element in the
collection
 next
 Gives access to the next element in the list
Java Programming: Program Design Including Data Structures
36
Linked List Iterators (continued)
Figure 16-29 UML class diagram of the class LinkedListIterator
and the outer-inner class relationship
Java Programming: Program Design Including Data Structures
37
Constructors and Instance Methods
of the class
LinkedListClass
Figure 16-30 UML class diagram of the class LinkedListClass
Java Programming: Program Design Including Data Structures
38
isEmptyList
 isEmptyList method
public boolean isEmptyList() {
return (first == null);
}
Java Programming: Program Design Including Data Structures
39
Default Constructor
 Default constructor
public LinkedListClass() {
first = null;
last = null;
count = 0;
}
Java Programming: Program Design Including Data Structures
40
initializeList
 initializeList method
public void initializeList() {
first = null;
last = null;
count = 0;
}
Java Programming: Program Design Including Data Structures
41
print List
 print method
public void print() {
LinkedListNode<T> current; // traverse variable
current = first; // set current to points to 1st node
while (current != null) { // while more data to print
System.out.print(current + “ “);
current = current.link;
}
} // end print
Java Programming: Program Design Including Data Structures
42
Length of the List
 length method
public int length() {
return count;
}
Java Programming: Program Design Including Data Structures
43
Retrieving Data of the First and the
Last Node
 front and back methods
public T front() {
return first.info;
}
public T back() {
return last.info;
}
Java Programming: Program Design Including Data Structures
44
clone
 Returns a clone of the list
 The current implementation of the clone method
makes a shallow copy of the list
Java Programming: Program Design Including Data Structures
45
Definition of the class
LinkedListClass
 Definition of the class LinkedListClass
public abstract class LinkedListClass<T> implements
LinkedListADT<T> {
//Place the definition of the class LinkedListNode<T> here.
//Place the definition of the class LinkedListIterator<T>
//here.
//Place the definition of the nonabstract methods and the
//abstract methods here.
}
Java Programming: Program Design Including Data Structures
46
Unordered Linked List
 Derive the class UnorderedLinkedList from the
abstract class LinkedListClass and implement
the operations:
 search()
 insertFirtst()
 insertLast()
 deleteNode()
Java Programming: Program Design Including Data Structures
47
Unordered Linked List
Figure 16-31 UML class diagram of the class UnorderedLinkedList
and the inheritance hierarchy
Java Programming: Program Design Including Data Structures
48
Definition of the class
UnorderedLinkedList
 Definition of the class UnorderedLinkedList
public class UnorderedLinkedList<T> extends LinkedListClass<T> {
}
Java Programming: Program Design Including Data Structures
49
search
 search method
public boolean search(T searchItem) {
LinkedListNode<T> current;
// traverse variable
boolean found;
current = first;
found = false;
// set current to point to 1st node
// initialize found to false
while (current != null && !found) //search the list
if (current.info.equals(searchItem))
found = true; // item found
else
// make current point to next node
current = current.link;
return found;
}
Java Programming: Program Design Including Data Structures
50
insertFirst
 insertFirst method
public void insertFirst(T newItem) {
LinkedListNode<T> newNode;
newNode = new LinkedListNode<T>(newItem, first);
// insert newNode before first
first = newNode;
// make first point to the
//
actual first node
if (last == null)
// if the list was empty, newNode is
last = newNode;
//
also the last node in the list
count++;
// increment count
}
Java Programming: Program Design Including Data Structures
51
insertLast
 insertLast method
public void insertLast(T newItem) {
LinkedListNode newNode; //variable to create the new node
newNode = new LinkedListNode(newItem, null);
if (first == null) {
// if the list is empty, newNode is
first = newNode; //
both the first and last node
last = newNode;
}
else {
// if list is not empty, insert newNode after last
last.link = newNode; // insert newNode after last and set
last = newNode;
//
last to point to new last node
}
count++;
} // end insertLast
Java Programming: Program Design Including Data Structures
52
deleteNode
 You should consider four cases
The list is empty
The first node is the node to be deleted
The node to be deleted is somewhere in the list
The list does not contain the node to be deleted
Java Programming: Program Design Including Data Structures
53
Ordered Linked Lists
 Derive the class OrderedLinkedList from the
abstract class LinkedListClass and implement
the operations:
 search()
 insert()
 insertFirtst()
 insertLast()
 deleteNode()
 Note: Assume that elements are
arranged in ascending order.
Java Programming: Program Design Including Data Structures
54
Ordered Linked Lists
Figure 16-39 UML class diagram of the class OrderedLinkedList
and the inheritance hierarchy
Java Programming: Program Design Including Data Structures
55
Definition of the class
OrderedLinkedList
 Definition of the class OrderedLinkedList
public class OrderedLinkedList<T> extends LinkedListClass<T> {
}
Java Programming: Program Design Including Data Structures
56
search
 search method
stop the search as soon as we find a node in the list with info greater than or
equal to the search item
public boolean search(T searchItem) {
LinkedListNode<T> current; // variable to traverse the list
boolean found;
current = first; // set current to point to 1st node in list
found = false;
// set found to false
while (current != null && !found ) { // search the list
Comparable<T> temp = (Comparable<T>) current.info;
if (temp.compareTo(searchItem) >= 0)
found = true;
else // make current point to the next node
current = current.link;
}
if (found)
found = current.info.equals(searchItem);
return found;
}
Java Programming: Program Design Including Data Structures
57
insert
 To insert an item in an ordered linked list
 First find the place for the new item
 Insert the item in the list
 You should consider three cases
 The list is initially empty
 The list is not empty and the new item is smaller than
the smallest item in the list
 The list is not empty and the new item is larger than
the first item in the list
Java Programming: Program Design Including Data Structures
58
insertFirst and insertLast
 insertFirst and insertLast methods
public void insertFirst(T newItem) {
insert(newItem);
}
public void insertLast(T newItem) {
insert(newItem);
}
Java Programming: Program Design Including Data Structures
59
deleteNode
 You should consider four cases
 The list is initially empty
 The item to be deleted is contained in the first node of
the list
 The item to be deleted is somewhere in the list
 The list is not empty, but the item to be deleted is not
in the list
Java Programming: Program Design Including Data Structures
60
Doubly Linked Lists
 Linked list in which every node has a next pointer
and a back pointer
 A doubly linked list can be traversed in either
direction
Figure 16-48 Doubly linked list
Java Programming: Program Design Including Data Structures
61
Doubly Linked List ADT
 Interface DoublyLinkedListADT
public interface DoublyLinkedListADT<T> extends Cloneable {
public Object clone();
public boolean isEmptyList();
public void initializeList();
public int length();
public void print();
public void reversePrint();
public boolean search(T searchItem);
public T front();
// the first node of the list
public T back();
// the last node of the list
public void insertNode(T insertItem);
public void deleteNode(T deleteItem);
}
Java Programming: Program Design Including Data Structures
62
Doubly Linked List
 Class DoublyLinkedList<T>
public class DoublyLinkedList<T> implements
DoublyLinkedListADT<T> {
protected DoublyLinkedListNode<T> first;
protected DoublyLinkedListNode<T> last;
protected int count;
// place definitions of DoublyLinkedListNode<T> and
// DoublyLinkedListIterator<T>
public class DoublyLinkedListNode<T> implements Cloneable {
…
}
public class DoublyLinkedListIterator<T> {
…
}
}
Java Programming: Program Design Including Data Structures
63
Doubly Linked List Node
 Class DoublyLinkedListNode<T>
public class DoublyLinkedListNode<T>
implements Cloneable {
T info;
DoublyLinkedListNode<T> next;
DoublyLinkedListNode<T> back;
// place constructors and methods here
}
Java Programming: Program Design Including Data Structures
64
Doubly Linked List Iterator
 Class DoublyLinkedListIterator<T>
public class DoublyLinkedListIterator<T> {
protected DoublyLinkedListNode<T> current;
protected DoublyLinkedListNode<T> previous;
// place constructors and methods here
}
Java Programming: Program Design Including Data Structures
65
Doubly Linked List
 Instance variables of the class DoublyLinkedList<T>
// variable to store the number of nodes
protected int count;
//reference variable to point to the first node
protected DoublyLinkedListNode<T> first;
//reference variable to point to the last node
protected DoublyLinkedListNode<T> last;
Java Programming: Program Design Including Data Structures
66
Default Constructor
 Default constructor of the class DoublyLinkedList<T>
public DoublyLinkedList() {
first= null;
last = null;
count = 0;
}
Java Programming: Program Design Including Data Structures
67
isEmptyList
 Method isEmptyList() of the class
DoublyLinkedList<T>
public boolean isEmptyList() {
return (first == null);
}
Java Programming: Program Design Including Data Structures
68
initializeList
 Method initializaList of the class
DoublyLinkedList<T>
public void initializeList() {
first = null;
last = null;
count = 0;
}
Java Programming: Program Design Including Data Structures
69
Length of the List
 Method length of the class DoublyLinkedList<T>
public int length() {
return count;
}
Java Programming: Program Design Including Data Structures
70
print
 Method print
public void print() {
// reference variable to traverse the list
DoublyLinkedListNode<T> current;
// set current to point to the first node
current = first;
while (current != null) {
System.out.print(current + “ “);
current = current.next;
}
}
Java Programming: Program Design Including Data Structures
71
reversePrint List
 Method reversePrint of the class
DoublyLinkedList<T>
public void reversePrint() {
// reference variable to traverse the list
DoublyLinkedListNode<T> current;
current = last;
// set current to point to the last node
while (current != null) {
System.out.print(current.info + “
current = current.back;
}
“);
}
Java Programming: Program Design Including Data Structures
72
search List
 Method search of the class DoublyLinkedList<T>
public boolean search(T searchItem) {
boolean found = false;
DoublyLinkedListNode<T> current = first;
while (current != null && !found) {
Comparable<T> temp = (Comparable<T>) current.info;
if (temp.compareTo(searchItem) >= 0)
found = true;
else
current = current.next;
}
if (found)
found = current.info.equals(searchItem);
return found;
}
Java Programming: Program Design Including Data Structures
73
The First and the Last Element
 Methods front and back of the class
DoublyLinkedList<T>
public T front() {
return first.info;
}
public T back() {
return last.info;
}
Java Programming: Program Design Including Data Structures
74
Insert
 You should consider four cases
Insertion in an empty list
Insertion at the beginning of a nonempty list
Insertion at the end of a nonempty list
Insertion somewhere in an nonempty list
public void insertNode(T insertItem) {
}
Java Programming: Program Design Including Data Structures
75
Delete Node
 You should consider four cases
The list is empty
The item to be deleted is in the first node of the list
The item to be deleted is somewhere in the list
The item to be deleted is not in the list
public void deleteNode(T deleteItem) {
}
Java Programming: Program Design Including Data Structures
76
Circular Linked Lists
 A linked list in which the last node points to the first
node
 It is convenient to make first point to the last
node
Figure 16-56 Circular linked list with more than one node
Java Programming: Program Design Including Data Structures
77
Programming Example: Video
Store
 The program should perform these operations:
Rent a video
Return a video
Create a list of videos owned by the store
Show the details of a particular video
Print a list of all videos in the store
Check whether a particular video is in the store
Maintain a customer database
Print a list of all videos rented by each customer
Java Programming: Program Design Including Data Structures
78
Key Terms
• Linked list: A collection of components, called nodes.
• Node: A data structure that has two components: the info and the link.
• Link: The component of a node that stores the address of the next node in
a list.
• Head: A reference variable that stores the address of the first node in a
list.
• First: See head.
• Iterator: An object that produces each element of a collection, such as a
linked list, one element at a time. An iterator typically has at least two
methods, hasNext and next.
• Doubly linked list: A linked list in which every node has a next pointer
and a back pointer.
• Circular linked list: A linked list in which the last node points to the first
node.
Java Programming: Program Design Including Data Structures
79
Chapter Summary
 Linked list
 List of nodes in which the order of the nodes is
determined by the link stored in each node
 Has a reference head to the first node
 Some operations include
 Traversing a list
 Inserting a list in the list
 Deleting a list from the list
Java Programming: Program Design Including Data Structures
80
Chapter Summary (continued)
 Linked list can be either sorted or unsorted
 Doubly linked list
 Linked list in which every node has a next and a back
pointer
 Operations are similar to those in a linked list
 Circular linked list
 Linked list as a linked list in which the last node
points to the first node
Java Programming: Program Design Including Data Structures
81