1
M180: Data Structures & Algorithms in Java
Linked Lists – Part 1
Arab Open University
Outline• Linked list nodes• Linked list operations
– Insertion– Append– Deletion
• Other types of linked lists– Doubly-linked– Circular
Limitation of Arrays
• An array has a limited number of elements– routines inserting a new value have to check that there
is room
• Can partially solve this problem by reallocating the array as needed (how much memory to add?)– adding one element at a time could be costly– one approach - double the current size of the array
• A better approach: use a Linked List
Dynamically Allocating Elements
• Allocate elements one at a time as needed, have each element keep track of the next element
• Result is referred to as linked list of elements, track next element with a pointer
Array of Elements in Memory
Linked List
Jane AnneBob
Jane Anne Bob
5
Anatomy of a linked list• A linked list consists of:
– A sequence of nodes
a b c d
Each node contains a valueand a link (reference) to some other node
The last node contains a null link
The list may have a header
myList
6
More terminology• A node’s successor is the next node in the sequence
– The last node has no successor• A node’s predecessor is the previous node in the
sequence– The first node has no predecessor
• A list’s length is the number of elements in it– A list may be empty (contain no elements)
ListNode
Linked Lists• Stores a collection of items non-contiguously.• Each item in the list is stored with an indication of where the
next item is.• Must know where first item is.• The list will be a chain of objects, called nodes, of type ListNode that contain the data and a reference to the next ListNode in the list.
• Allows addition or deletion of items in the middle of collection with only a constant amount of data movement. Contrast this with array.
A0 A1 A2 A3first ListNode ListNodeListNode
ListNode: Definitionpublic class ListNode <DataType>{ DataType data; ListNode<DataType> next;
// constructors ListNode(DataType d, ListNode<DataType> n) { data = d; next = n; }
ListNode(DataType d) { this (d, null); }
ListNode() { this (null); }}
a
Linked List: Insertion
• Insert X immediately after current position
a
current
current
b c d
b c d
x
Implementing Insertion: Step By Step• Insertion immediately after current position
// create a new node
tmp = new ListNode<DataType>();
a
current
b
tmp
Implementing Insertion: Step By Step• Insertion immediately after current position
// create a new node
tmp = new ListNode<DataType>();
// place x in the element field
tmp.data = x;
a
current
b
tmp
Implementing Insertion: Step By Step• Insertion immediately after current position
// create a new node
tmp = new ListNode<DataType>();
// place x in the element field
tmp.data = x;
a
current
b
tmp
x
Implementing Insertion: Step By Step• Insertion immediately after current position
// create a new node
tmp = new ListNode<DataType>();
// place x in the element field
tmp.data = x;
// x’s next node is b
tmp.next = current.next;
// a’s next node is x
current.next = tmp;
a
current
b
tmp
x
Implementing Insertion: Shorter Version• A shorter version:
// create a new node
tmp = new ListNode<DataType>(x,current.next);
// a’s next node is x
current.next = tmp;
a
current
b
tmp
x
Implementing Insertion: Shorter Version• A shorter version:
// create a new node
tmp = new ListNode<DataType>(x,current.next);
// a’s next node is x
current.next = tmp;
a
current
b
tmp
x
• Insert X immediately at the end of the list // last refers to the last node in the linked listlast.next = new ListNode<DataType>();last = last.next; // adjust lastlast.data = x; // place x in the nodelast.next = null; // adjust next
• Most efficient approachlast = last.next = new ListNode (x, null);
Implementing Append
a b c d
last
a b c X
last
d
Implementing Basic Deletion• Delete an item immediately after current position
• Basic deletion is a bypass in the linked list.
a b x
a b
current
current
current.next = current.next.next;
Implementing Basic Deletion
• Need a reference to node prior to the one to be deleted.
a b x
a b x
a b
current
current
current
Iterate Through The Linked List
• If items are stored in contiguous array://step through array, outputting each item
for (int index = 0; index < a.length; index++)
System.out.println (a[index]);
• If items are stored in a linked list:// step through list, outputting each item
for(ListNode p=l.first; p!=null; p=p.next)
System.out.println (p.data);
A0 A1 A2 A3
first
Top Related