C++ Programming:
Program Design Including
Data Structures, Fifth Edition
Linked Lists
Objectives
In this chapter, you will:
• Learn about linked lists
• Become aware of the basic properties of
linked lists
• Explore the insertion and deletion operations
on linked lists
• Discover how to build and manipulate a
linked list
• Learn how to construct a doubly linked list
C++ Programming: Program Design Including Data Structures, Fifth Edition 2
Introduction
• Data can be organized and processed
sequentially using an array, called a
sequential list
• Problems with an array
– Array size is fixed
– Unsorted array: searching for an item is slow
– Sorted array: insertion and deletion is slow
C++ Programming: Program Design Including Data Structures, Fifth Edition 3
Linked Lists
• Linked list: a list of items (nodes), in which
the order of the nodes is determined by
the address, called the link, stored in each
node
Link field in last node
is NULL
C++ Programming: Program Design Including Data Structures, Fifth Edition 4
Linked Lists (cont'd.)
• Because each node of a linked list has two
components, we need to declare each
node as a class or struct
– Data type of a node depends on the specific
application
– The link component of each node is a pointer
C++ Programming: Program Design Including Data Structures, Fifth Edition 5
Linked Lists: Some Properties
C++ Programming: Program Design Including Data Structures, Fifth Edition 6
Linked Lists: Some Properties
(cont'd.)
• current = head;
– Copies value of head into current
C++ Programming: Program Design Including Data Structures, Fifth Edition 7
Linked Lists: Some Properties
(cont'd.)
• current = current->link;
C++ Programming: Program Design Including Data Structures, Fifth Edition 8
Traversing a Linked List
• The basic operations of a linked list are:
– Search to determine if an item is in the list
– Insert an item in the list
– Delete an item from the list
• Traversal: given a pointer to the first node
of the list, step through the nodes of the
list
C++ Programming: Program Design Including Data Structures, Fifth Edition 9
Traversing a Linked List
(cont'd.)
• To traverse a linked list:
• Example:
C++ Programming: Program Design Including Data Structures, Fifth Edition 10
Item Insertion and Deletion
• Consider the following definition of a node:
• We will use the following variable
declaration:
C++ Programming: Program Design Including Data Structures, Fifth Edition 11
Insertion
• Consider the following linked list:
• A new node with info 50 is to be created
and inserted after p
C++ Programming: Program Design Including Data Structures, Fifth Edition 12
Insertion (cont'd.)
C++ Programming: Program Design Including Data Structures, Fifth Edition 13
Insertion (cont'd.)
• Using two pointers, we can simplify the
insertion code somewhat
• To insert newNode between p and q:
The order in which these statements
execute does not matter
C++ Programming: Program Design Including Data Structures, Fifth Edition 14
Insertion (cont'd.)
C++ Programming: Program Design Including Data Structures, Fifth Edition 15
Deletion
Node with info 34 is removed from the list, but
memory is still occupied; node is dangling
C++ Programming: Program Design Including Data Structures, Fifth Edition 16
Deletion (cont’d.)
C++ Programming: Program Design Including Data Structures, Fifth Edition 17
Building a Linked List
• If data is unsorted
– The list will be unsorted
• Can build a linked list forward or backward
– Forward: a new node is always inserted at the
end of the linked list
– Backward: a new node is always inserted at
the beginning of the list
C++ Programming: Program Design Including Data Structures, Fifth Edition 18
Building a Linked List Forward
• You need three pointers to build the list:
– One to point to the first node in the list, which
cannot be moved
– One to point to the last node in the list
– One to create the new node
C++ Programming: Program Design Including Data Structures, Fifth Edition 19
Building a Linked List Forward
(cont’d.)
C++ Programming: Program Design Including Data Structures, Fifth Edition 20
Building a Linked List Forward
(cont’d.)
C++ Programming: Program Design Including Data Structures, Fifth Edition 21
Building a Linked List Forward
(cont'd.)
We now repeat statements 1 through 6b three more times:
C++ Programming: Program Design Including Data Structures, Fifth Edition 22
Building a Linked List Forward
(cont’d.)
C++ Programming: Program Design Including Data Structures, Fifth Edition 23
Building a Linked List Backward
• The algorithm is:
– Initialize first to NULL
– For each item in the list
• Create the new node, newNode
• Store the item in newNode
• Insert newNode before first
• Update the value of the pointer first
C++ Programming: Program Design Including Data Structures, Fifth Edition 24