0% found this document useful (0 votes)
19 views79 pages

CHAPTER 6 - LINKED LISTS New

The document covers the concept of linked lists, including types such as singly linked lists, doubly linked lists, and circular linked lists. It explains the structure, advantages, and implementation of linked lists in Java, along with a self-defined linked list class. Key operations such as insertion and traversal are also discussed.

Uploaded by

aravin1107
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
19 views79 pages

CHAPTER 6 - LINKED LISTS New

The document covers the concept of linked lists, including types such as singly linked lists, doubly linked lists, and circular linked lists. It explains the structure, advantages, and implementation of linked lists in Java, along with a self-defined linked list class. Key operations such as insertion and traversal are also discussed.

Uploaded by

aravin1107
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 79

Topic 6: Linked List

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

🢖🢖 Linked List is a linear collection of objects (called nodes) connected by the


reference links.
🢖🢖 Program accesses a linked list via a reference to the first node in list.
🢖🢖 Program accesses a subsequent nodes via the reference link stored in the
previous node.
🢖🢖 Reference in the last node of a list is set to null.
Linked Structure (cont)
🢖🢖 Address of first node in list stored in separate location,
called the head
Head NUL
🢖🢖 When there are no nodes, head will be NULL. L
🢖🢖 As soon as there is a node in the list, head will contain the address
of this first node.
🢖🢖 Head should always point to the first node
🢖🢖 The address of the first node in a linked list is stored in the
reference variable head
🢖🢖 A list with no nodes is called an empty list or a null list.
🢖🢖 A NULL Pointer is used to signal the end of a list. The last
node will have NULL in its next address part.
head 2000 2800 1500 3600
2000 BOB
2800 BIBI 1500 CICI 3600 SISI null
O
info next info next info next
Advantanges of Linked List Structure
🢖🢖 Dynamic data structure
🢖🢖 when the number of elements is unpredictable
🢖🢖 The size can be increased or decreased as
necessary
🢖🢖 Simple to maintain elements in sorted order
🢖🢖 Element can be inserted at a proper location in
the list
Types of Linked List
🢖🢖 Several different types of linked list exist:
🢖🢖 singly-linked lists,
🢖🢖 doubly-linked lists, and
🢖🢖 circularly-linked lists.
Types of Linked List(cont)
🢖🢖 singly-linked lists
❖ The simplest kind of linked list is a singly-
linked list which has one link per node.
❖ This link points to the next node in the list, or
to a null value or empty list if it is the final node.
❖It is also known as linearly linked list.

A singly-linked list containing two values: the value of


the current node and a link to the next node
Types of Linked List(cont)
🢖🢖 singly-linked lists
❖A singly linked list's node is divided into two parts.
❖The first part holds or points to information about
the node, and second part holds the address of
next node.
❖A singly linked list travels one way.

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.

A doubly-linked list containing three integer values: the value, the


link forward to the next node, and the link backward to the previous
node
Types of Linked List(cont)
🢖🢖 Circularly-linked list
🢖🢖 In a circularly-linked list, the first and final nodes are
linked together.
🢖🢖 This can be done for both singly and doubly linked lists.
🢖🢖 To traverse a circular linked list, you begin at any node and
follow the list in either direction until you return to the
original node.
🢖🢖 Viewed another way, circularly-linked lists can be seen as
having no beginning or end.
🢖🢖 This type of list is most useful for managing buffers for
data ingest, and in cases where you have one object in a
list and wish to see all other objects in the list.

A circularly-linked list containing three integer values


Implementation of Linked List
▪ JAVA provides class LinkedList for implementing
and manipulating linked list in JAVA package –
(java.util.*)

▪ LinkedList class in JAVA uses a doubly linked list


implementation.

▪ Programmer can also create self-defined linked list


by defining own linked list class to represent the list
node and linked list structure.
Implementation of Linked List
▪ JAVA provides class LinkedList for implementing
and manipulating linked list in JAVA package –
(java.util.*)

▪ LinkedList class in JAVA uses a doubly linked list


implementation.

▪ Programmer can also create self-defined linked list


by defining own linked list class to represent the list
node and linked list structure.
Self-defined Linked List (Node)
Node structure

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

Node(Object obj) //constructor to initialize the first node


{ data = obj; } //just initialize the data, not the reference link
}
Self-defined Linked List (LinkedList)
Class : LinkedList
Fields: first //first node
last //last node
current //current 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

public class LinkedList {


private Node first; //the 1st node
private Node last; //the last node
private Node current; //if any

public LinkedList() // default constructor


{ first = null; //set the linked list to null
last = null;
current = null; }

Example: If current is the third node


X

first current last


Class Definition for LinkedList
// Class LinkedList definition

public class LinkedList {


private Node first; //the 1st node
private Node last; //the last node
private Node current; //if any

public LinkedList() // default constructor


{ first = null; //set the linked list to null
last = null;
current = null; }

Example: If current is the third node


X

first current last


Class Definition for LinkedList(cont)

// Check whether the list is empty, return true if the list is empty

public boolean isEmpty()


{
return (first == null);
}
Class Definition for LinkedList(cont)
Data Insertion (1) : At Front
public void insertAtFront(Object insertItem)
{
Node newNode = new Node(insertItem);
if (isEmpty())
{ first = newNode; insertItem
last = newNode;
} 5
else
{
newNode.next = first;
first = newNode;
}
}
Class Definition for LinkedList(cont)
Data Insertion (1) : At Front
public void insertAtFront(Object insertItem)
{
Node newNode = new Node(insertItem);
insertItem
if (isEmpty())
{ first = newNode; 5
last = newNode;
} newNode
else
{
newNode.next = first; 5
first = newNode;
}
}
Class Definition for LinkedList(cont)
Data Insertion (1) : At Front
insertItem
public void insertAtFront(Object insertItem)
{ 5
Node newNode = new Node(insertItem);
if (isEmpty()) newNode
{ first = newNode;
last = newNode;
} 5
else
{
newNode.next = first;
first = newNode; first
}
} last null

public boolean isEmpty() current


{
return (first==null);
}
Class Definition for LinkedList(cont)
Data Insertion (1) : At Front
insertItem
public void insertAtFront(Object insertItem)
{ 5
Node newNode = new Node(insertItem);
if (isEmpty()) newNode
{ first = newNode;
last = newNode;
} 5
else
{
newNode.next = first;
first = newNode; first
}
last null
}

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()

public Object getNext()


{
if (current == last)
return null;
else
{ 2
current = current.next; 6 5
return current.data;
}
}
first last

current null
Class Definition for LinkedList(cont)
Data Retrieval (1): getNext()

public Object getNext()


{
if (current == last)
return null;
else
{ 2
current = current.next; 6 5
return current.data;
}
}
first last

current null
Class Definition for LinkedList(cont)
Data Retrieval (1): getNext()

public Object getNext()


{
if (current == last)
return null;
else
{ 2
current = current.next; 6 5
return current.data;
}
}
first last

current null
Class Definition for LinkedList(cont)
Data Retrieval (2): getNext()

public Object getNext()


{
if (current == last)
return null;
else
{ 2
current = current.next; 6 5
return current.data;
}
}
first last

current null
Class Definition for LinkedList(cont)
Data Retrieval (2): getNext()

public Object getNext()


{
if (current == last)
return null;
else
{ 2
current = current.next; 6 5
return current.data;
}
}
first last

current null
Class Definition for LinkedList(cont)
Data Retrieval (2): getNext()

public Object getNext()


{
if (current == last)
return null;
else
{ 2
current = current.next; 6 5
return current.data;
}
}
first last

current null
Class Definition for LinkedList(cont)
Data Retrieval (3): getNext()

public Object getNext()


{
if (current == last)
return null;
else
{ 2
current = current.next; 6 5
return current.data;
}
}
first last

current null
Class Definition for LinkedList(cont)
Data Retrieval (3): getNext()

public Object getNext()


{
if (current == last)
return null;
else
{ 2
current = current.next; 6 5
return current.data;
}
}
first last

current null
Usage

Console output:
Usage

Console output:
Exercise Question 1

🢖🢖 Given the partial source code for the linked


list data structure implementation as shown
in Figure 1, analyze and give the exact output
for the main program given in Figure 2.
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…

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy