CHAPTER 6 - LINKED LISTS New
CHAPTER 6 - LINKED LISTS New
LESSON OUTCOMES
At the end of the lesson, student should be able
to:
🢖🢖 Understand the concept of List and Linked
List
🢖🢖 Understand the concept of variation of linked
list: doubly linked list and circular linked list
🢖🢖 Define and use the ADT of Linked List and its
operations
🢖🢖 List, explain and apply the Linked List in
solving a problem
Linked Structure
🢖🢖 store elements anywhere in memory and linked by a reference/pointer
Information
about the Address for
node next node
Types of Linked List(cont)
🢖🢖 singly-linked lists
head 2000 2800 1500 3600
200
0 17 2800 92 1500 63 3600 45 null
info next info next info next info next
🢖🢖 head 🡪🡪 2000 (access the first node)
🢖🢖 head.info 🡪🡪 17 (access the data of the first node)
🢖🢖 Because head is 2000 and the info of the node at location 2000 is 17
🢖🢖 head.next 🡪🡪 2800 (access the second node)
🢖🢖 head.next.info 🡪🡪 92 (access the data of the 2nd node)
🢖🢖 Because head.next is 2800 and the info of the node at location 2800 is
92
Types of Linked List(cont)
🢖🢖 Doubly-linked list
🢖🢖 A more sophisticated kind of linked list is a doubly-linked
list or two-way linked list.
🢖🢖 Each node has two links:
🢖🢖 one points to the previous node, or points to a null value or empty
list if it is the first node; and
🢖🢖 one points to the next, or points to a null value or empty list if it is
the final node.
ListNode object
data next
- data type (primitive or 🗉🗉Reference link
ADT) 🗉🗉Store reference to next node
(Node type)
Class : Node
Fields/Data : data, next;
Methods : Node ( Object obj ) // default
constructor
Class definition for Node
public class Node
{
Object data; //data is an object type
Node next; //the pointer points to the next node
Methods :
Constructor (default)
boolean isEmpty() // check whether list is empty
void insertAtFront(object) // insert at the front of list
void insertAtBack(object) // insert at the end of list
Object removeFromFront() // delete element from front
Object removeFromBack() // delete element from back
Object getFirst() // get the first node
Object getNext() // get the reference for next node
Class Definition for LinkedList
// Class LinkedList definition
// Check whether the list is empty, return true if the list is empty
current
Class Definition for LinkedList(cont)
Data Insertion (1) : At Front
insertItem
public void insertAtFront(Object insertItem) 5
{
Node newNode = new Node(insertItem); newNode
if (isEmpty())
{ first = newNode;
last = newNode; 5
}
else
{
newNode.next = first; first
first = newNode;
} last null
}
current
Class Definition for LinkedList(cont)
Data Insertion (2) : At Front
public void insertAtFront(Object insertItem)
{ insertItem
Node newNode = new Node(insertItem);
if (isEmpty()) 6
{ first = newNode;
last = newNode;
}
else
{
newNode.next = first;
first = newNode; 5
}
}
null
first
last current
Class Definition for LinkedList(cont)
Data Insertion (2) : At Front
insertItem
public void insertAtFront(Object insertItem)
{ 6
Node newNode = new Node(insertItem);
if (isEmpty())
{ first = newNode;
last = newNode;
newNode
}
else
{
newNode.next = first; 6 5
first = newNode;
}
}
first
null
last
current
Class Definition for LinkedList(cont)
Data Insertion (2) : At Front
insertItem
public void insertAtFront(Object insertItem)
{ 6
Node newNode = new Node(insertItem);
if (isEmpty())
{ first = newNode; newNode
last = newNode;
}
else
{
6 5
newNode.next = first;
first = newNode;
}
}
first
null
last
current
Class Definition for LinkedList(cont)
Data Insertion (2) : At Front
public void insertAtFront(Object insertItem)
insertItem
{ 6
Node newNode = new Node(insertItem);
if (isEmpty())
{ first = newNode; newNode
last = newNode;
}
else
{ 6 5
newNode.next = first;
first = newNode;
}
} first
last null
current
Class Definition for LinkedList(cont)
Data Insertion (2) : At Front
insertItem
public void insertAtFront(Object insertItem)
{ 6
Node newNode = new Node(insertItem);
if (isEmpty()) newNode
{ first = newNode;
last = newNode;
}
else 6 5
{
newNode.next = first;
first = newNode;
} first
}
last null
current
Class Definition for LinkedList(cont)
Data Insertion (3) : At Front
public void insertAtFront(Object insertItem)
{ insertItem
Node newNode = new Node(insertItem);
if (isEmpty()) 2
{ first = newNode;
last = newNode;
}
else
{ 6 5
newNode.next = first;
first = newNode;
} null
} first
last current
Class Definition for LinkedList(cont)
Data Insertion (3) : At Front
insertItem
public void insertAtFront(Object insertItem)
{ 2
Node newNode = new Node(insertItem);
if (isEmpty())
{ first = newNode; newNode
last = newNode;
}
else
{ 2 6 5
newNode.next = first;
first = newNode;
}
} first
last
null
current
Class Definition for LinkedList(cont)
Data Insertion (3) : At Front
insertItem
public void insertAtFront(Object insertItem)
{ 2
Node newNode = new Node(insertItem);
if (isEmpty())
{ first = newNode; newNode
last = newNode;
}
else
{ 2 6 5
newNode.next = first;
first = newNode;
}
} first
last
null
current
Class Definition for LinkedList(cont)
Data Insertion 3) : At Front
public void insertAtFront(Object insertItem)
insertItem
{ 2
Node newNode = new Node(insertItem);
if (isEmpty())
{ first = newNode;
last = newNode; newNode
}
else
{
2 6 5
newNode.next = first;
first = newNode;
}
} first
last
null
current
Class Definition for LinkedList(cont)
Data Insertion (3) : At Front
insertItem
public void insertAtFront(Object insertItem)
{ 2
Node newNode = new Node(insertItem);
if (isEmpty())
{ first = newNode; newNode
last = newNode;
}
else
{ 2 6 5
newNode.next = first;
first = newNode;
}
} first
last
null
current
Class Definition for LinkedList(cont)
Data Insertion (1) : At Back insertItem
public void insertAtBack(Object insertItem) 3
{
Node newNode = new Node(insertItem);
if (isEmpty())
{ first = newNode;
last = newNode;
}
else
2 6 5
{
last.next = newNode;
last = newNode;
} first last
}
null
current
Class Definition for LinkedList(cont)
Data Insertion (1) : At Back insertItem
public void insertAtBack(Object insertItem) 3
{
Node newNode = new Node(insertItem);
if (isEmpty())
{ first = newNode;
last = newNode;
} 2 6 5
else
{
last.next = newNode;
first last 3
last = newNode;
}
}
newNode
null
current
Class Definition for LinkedList(cont)
Data Insertion (1) : At Back insertItem
public void insertAtBack(Object insertItem) 3
{
Node newNode = new Node(insertItem);
if (isEmpty())
{ first = newNode;
last = newNode;
} 2 6 5
else
{
last.next = newNode; 3
last = newNode; first last
}
}
newNode
null
current
Class Definition for LinkedList(cont)
Data Insertion (1) : At Back insertItem
public void insertAtBack(Object insertItem) 3
{
Node newNode = new Node(insertItem);
if (isEmpty())
{ first = newNode;
last = newNode;
} 2 6 5
else
{
last.next = newNode;
last = newNode; first last 3
}
}
newNode
null
current
Class Definition for LinkedList(cont)
Data Insertion (1) : At Back insertItem
public void insertAtBack(Object insertItem) 3
{
Node newNode = new Node(insertItem);
if (isEmpty())
{ first = newNode;
last = newNode;
} 2 6 5
else
{
last.next = newNode;
last = newNode; first 3
} last
}
newNode
null
current
Class Definition for LinkedList(cont)
Data Removal(1) : From Front
public Object removeFromFront()
{
Object removeItem = null; removeItem
if (isEmpty())
{
return removeItem; null
}
removeItem = first.data;
if ( first == last)
{
first = null;
last = null;
}
2 6 5 3
else
first = first.next; last
return removeItem; first current null
}
Class Definition for LinkedList(cont)
Data Removal(1) : From Front
public Object removeFromFront()
{
Object removeItem = null; removeItem
if (isEmpty())
{
return removeItem; null
}
removeItem = first.data;
if ( first == last)
{
first = null;
last = null;
}
2 6 5 3
else
first = first.next; last
return removeItem; first current null
}
Class Definition for LinkedList(cont)
Data Removal(1) : From Front
public Object removeFromFront()
{
Object removeItem = null;
if (isEmpty()) removeItem
{
return removeItem;
}
removeItem = first.data;
if ( first == last)
{
first = null;
last = null;
}
2 6 5 3
else
first = first.next; last
return removeItem; first current null
}
Class Definition for LinkedList(cont)
Data Removal(1) : From Front
public Object removeFromFront()
{
Object removeItem = null;
if (isEmpty()) removeItem
{
return removeItem;
}
removeItem = first.data;
if ( first == last)
{
first = null;
last = null;
}
2 6 5 3
else
first = first.next;
return removeItem; first current null last
}
Class Definition for LinkedList(cont)
Data Removal(1) : From Front
public Object removeFromFront()
{
Object removeItem = null;
if (isEmpty()) removeItem
{
return removeItem;
}
removeItem = first.data;
if ( first == last)
{
first = null;
last = null;
}
2 6 5 3
else
first = first.next;
first current null last
return removeItem;
}
Class Definition for LinkedList(cont)
Data Removal(1) : From Front
public Object removeFromFront()
{
Object removeItem = null;
if (isEmpty()) removeItem
{
return removeItem;
}
removeItem = first.data;
if ( first == last)
{
first = null;
last = null;
}
2 6 5 3
else
first = first.next;
first current null last
return removeItem;
}
Class Definition for LinkedList(cont)
Data Removal(2) : From Front
public Object removeFromFront()
{
Object removeItem = null;
if (isEmpty()) removeItem
{
return removeItem; null
}
removeItem = first.data;
if ( first == last)
{
first = null;
last = null;
}
6 5 3
else
first = first.next;
first current null last
return removeItem;
}
Class Definition for LinkedList(cont)
Data Removal(2) : From Front
public Object removeFromFront()
{
Object removeItem = null;
if (isEmpty()) removeItem
{
return removeItem; null
}
removeItem = first.data;
if ( first == last)
{
first = null;
last = null;
}
6 5 3
else
first = first.next;
first current null last
return removeItem;
}
Class Definition for LinkedList(cont)
Data Removal(2) : From Front
public Object removeFromFront()
{
Object removeItem = null;
if (isEmpty()) removeItem
{
return removeItem;
}
removeItem = first.data;
if ( first == last)
{
first = null;
last = null;
}
6 5 3
else
first = first.next;
first current null last
return removeItem;
}
Class Definition for LinkedList(cont)
Data Removal(2) : From Front
public Object removeFromFront()
{
Object removeItem = null;
if (isEmpty()) removeItem
{
return removeItem;
}
removeItem = first.data;
if ( first == last)
{
first = null;
last = null;
}
6 5 3
else
first = first.next;
first current null last
return removeItem;
}
Class Definition for LinkedList(cont)
Data Removal(2) : From Front
public Object removeFromFront()
{
Object removeItem = null;
if (isEmpty()) removeItem
{
return removeItem;
}
removeItem = first.data;
if ( first == last)
{
first = null;
last = null;
}
6 5 3
else
first = first.next;
return removeItem; first last
}
current null
Class Definition for LinkedList(cont)
Data Removal(2) : From Front
public Object removeFromFront()
{
Object removeItem = null;
if (isEmpty()) removeItem
{
return removeItem;
}
removeItem = first.data;
if ( first == last)
{
first = null;
last = null;
}
6 5 3
else
first = first.next;
return removeItem; first last
}
current null
Class Definition for LinkedList(cont)
Data Removal : From Back
public Object removeFromBack()
{
first
Object removeItem = null;
if (isEmpty()) 5
{
return removeItem;
}
removeItem = last.data;
if ( first == last)
{
first = null;
3
last = null;
}
else
{ last current
current = first;
while (current.next != last)
current = current.next; removeItem null
last = current;
last.next = null;
}
return removeItem;
}
Class Definition for LinkedList(cont)
Data Removal : From Back
public Object removeFromBack()
{
first
Object removeItem = null;
if (isEmpty()) 5
{
return removeItem;
}
removeItem = last.data;
if ( first == last)
{
first = null;
3
last = null;
}
else
{ last current
current = first;
while (current.next != last)
current = current.next; removeItem null
last = current;
last.next = null;
}
return removeItem;
}
Class Definition for LinkedList(cont)
Data Removal : From Back
public Object removeFromBack()
{
first
Object removeItem = null;
if (isEmpty()) 5
{
return removeItem;
}
removeItem = last.data;
if ( first == last)
{
first = null;
3
last = null;
}
else
{ last current
current = first;
while (current.next != last)
current = current.next;
last = current; removeItem null
last.next = null;
}
return removeItem;
}
Class Definition for LinkedList(cont)
Data Removal : From Back
public Object removeFromBack()
{
first
Object removeItem = null;
if (isEmpty()) 5
{
return removeItem;
}
removeItem = last.data;
if ( first == last)
{
first = null;
3
last = null;
}
else
{ last current
current = first;
while (current.next != last)
current = current.next;
last = current; removeItem null
last.next = null;
}
return removeItem;
}
Class Definition for LinkedList(cont)
Data Removal : From Back current
public Object removeFromBack()
{
first
Object removeItem = null;
if (isEmpty()) 5
{
return removeItem;
}
removeItem = last.data;
if ( first == last)
{
first = null;
3
last = null;
}
else
{ last
current = first;
while (current.next != last)
current = current.next;
last = current; removeItem null
last.next = null;
}
return removeItem;
}
Class Definition for LinkedList(cont)
Data Removal : From Back current
public Object removeFromBack()
{
first
Object removeItem = null;
if (isEmpty()) 5
{
return removeItem;
}
removeItem = last.data;
if ( first == last)
{
first = null;
3
last = null;
}
else
{ last
current = first;
while (current.next != last)
current = current.next;
last = current; removeItem null
last.next = null;
}
return removeItem;
}
Class Definition for LinkedList(cont)
Data Removal : From Back current
public Object removeFromBack()
{
first
Object removeItem = null;
if (isEmpty()) 5
{
return removeItem;
}
removeItem = last.data;
if ( first == last)
{
3
first = null;
last = null;
last
}
else
{
current = first;
while (current.next != last)
current = current.next;
last = current; removeItem null
last.next = null;
}
return removeItem;
}
Class Definition for LinkedList(cont)
Data Removal : From Back current
public Object removeFromBack()
{
first
Object removeItem = null;
if (isEmpty()) 5
{
}
return removeItem;
null
removeItem = last.data;
if ( first == last)
{
3
first = null;
last = null;
last
}
else
{
current = first;
while (current.next != last)
current = current.next;
last = current; removeItem
last.next = null;
}
return removeItem;
}
Class Definition for LinkedList(cont)
Data Removal : From Back current
public Object removeFromBack()
{
first
Object removeItem = null;
if (isEmpty()) 5
{
}
return removeItem;
null
removeItem = last.data;
if ( first == last)
{
3
first = null;
last = null;
last
}
else
{
current = first;
while (current.next != last)
current = current.next;
last = current; removeItem
last.next = null;
}
return removeItem;
}
Class Definition for LinkedList(cont)
Data Retrieval: getFirst()
public Object getFirst()
{
if (isEmpty())
return null;
else
{
current = first;
return current.data;
2 6 5
}
}
first last
current null
Class Definition for LinkedList(cont)
Data Retrieval: getFirst()
public Object getFirst()
{
if (isEmpty())
return null;
else
{
current = first;
return current.data;
2 6 5
}
}
first last
current null
Class Definition for LinkedList(cont)
Data Retrieval: getFirst()
public Object getFirst()
{
if (isEmpty())
return null;
else
{
current = first;
return current.data;
2 6 5
}
}
first last
current null
Class Definition for LinkedList(cont)
Data Retrieval (1): getNext()
current null
Class Definition for LinkedList(cont)
Data Retrieval (1): getNext()
current null
Class Definition for LinkedList(cont)
Data Retrieval (1): getNext()
current null
Class Definition for LinkedList(cont)
Data Retrieval (2): getNext()
current null
Class Definition for LinkedList(cont)
Data Retrieval (2): getNext()
current null
Class Definition for LinkedList(cont)
Data Retrieval (2): getNext()
current null
Class Definition for LinkedList(cont)
Data Retrieval (3): getNext()
current null
Class Definition for LinkedList(cont)
Data Retrieval (3): getNext()
current null
Usage
Console output:
Usage
Console output:
Exercise Question 1
Figure 1
Exercise Question 1
Figure 2
Answer
Exercise Question 2
🢖🢖 Design and implement the linked list data structure in Java. You must use
the code skeleton in Figure 1 and show your implementations for the
following methods:
🢖🢖 insert_node (at the end without given position) [4 marks]
🢖🢖 insert_node (at a given position) [4 marks]
🢖🢖 remove_node (at a given position) [4 marks]
🢖🢖 retrieve_node (at a given position) [3 marks]
THE END…