Inserting a Node at the Front10 15 7 null entry 13 insert_ptr 13 insert_ptr = new nodeentry, head_ptr; Make the old head pointer point to the new node.. Inserting a Node at the Front13 n
Trang 1Chapter 5 introduces the used data structure of linked lists.This presentation shows how to implement the most common operations on linked lists.
often-Linked Lists in Action
Trang 2For this presentation, nodes in a
linked list are objects, as shown here
Trang 3The data_field of each node is a type called
value_type, defined by a typedef
Trang 4Each node also contains a link_field
which is a pointer to another node
Trang 5A program can keep track of the front
node by using a pointer variable such
as head_ptr in this example
Notice that head_ptr is not a node it
Trang 6Declarations for Linked Lists
A program can keep track of the front node by using a pointer variable such
as head_ptr
Notice that head_ptr is not a node it
is a pointer to a node
We represent the empty list by storing
null in the head pointer.
head_ptr
null
Trang 7void list_head_insert(node*& head_ptr, const node::value_type& entry);Inserting a Node at the Front
We want to add a new entry, 13,
to the front of the linked list
shown here
10
15
7 null
entry
13
Trang 8Inserting a Node at the Front
Create a new node, pointed to
by a local variable insert_ptr
13
insert_ptr
void list_head_insert(node*& head_ptr, const node::value_type& entry);
Trang 9Inserting a Node at the Front
insert_ptr = new node;
10
15
7 null
Trang 10Inserting a Node at the Front
10
15
7 null
head_ptr entry
13
insert_ptr
13
insert_ptr = new node;
Place the data in the new node's
data_field
void list_head_insert(node*& head_ptr, const node::value_type& entry);
Trang 11Inserting a Node at the Front
10
15
7 null
entry
13
insert_ptr
13
insert_ptr = new node;
Place the data in the new node's
data_field
Connect the new node to the
front of the list
void list_head_insert(node*& head_ptr, const node::value_type& entry);
Trang 12Inserting a Node at the Front
10
15
7 null
head_ptr entry
13
insert_ptr
13
insert_ptr = new node(entry, head_ptr);
The correct new node
Trang 13Inserting a Node at the Front
10
15
7 null
entry
13
insert_ptr
13
insert_ptr = new node(entry, head_ptr);
Make the old head pointer
point to the new node
void list_head_insert(node*& head_ptr, const node::value_type& entry);
Trang 14Inserting a Node at the Front
10
15
7 null
head_ptr entry
Trang 15Inserting a Node at the Front
insert_ptr = new node(entry, head_ptr);
head_ptr = insert_ptr;
10
15
7 null
13
When the function returns, the
linked list has a new node at the
front
void list_head_insert(node*& head_ptr, const node::value_type& entry);
Trang 16void list_head_insert(node*& head_ptr, const node::value_type& entry) {
Trang 17void list_head_insert(node*& head_ptr, const node::value_type& entry) {
empty list ?
Trang 18head_ptr entry
Inserting a Node at the Front
Does the function
work correctly for the
empty list ?
void list_head_insert(node*& head_ptr, const node::value_type& entry) {
Trang 19Inserting a Node at the Front
Trang 20Inserting a Node at the Front
head_ptr entry
Trang 21Inserting a Node at the Front
13 null
void list_head_insert(node*& head_ptr, const node::value_type& entry)
returns, the linked list
has one node
Trang 22Always make sure that
your linked list
functions work
correctly with an
empty list
EMPTY LIST
Trang 23Pseudocode for Inserting Nodes
Nodes are often inserted at places other than the front of a linked list
There is a general pseudocode that you can follow for any insertion function
Trang 24Pseudocode for Inserting Nodes
Determine whether the new node will be the first node in the linked list If so, then there is only one step:
list_head_insert(head_ptr, entry);
Trang 25Pseudocode for Inserting Nodes
Determine whether the new node will be the first node in the linked list If so, then there is only one step:
Trang 26Pseudocode for Inserting Nodes
Determine whether the new node will be the first node in the linked list If so, then there is only one step:
A pointer
to the head of the list
Trang 27Pseudocode for Inserting Nodes
Determine whether the new node will be the first node in the linked list If so, then there is only one step:
Th
e d ata
to p ut
in t
he n ew
no de
Trang 28Pseudocode for Inserting Nodes
Otherwise (if the new node will not be first):
Start by setting a pointer named previous_ptr to point to the node which is just before the new node's position.
Trang 29Pseudocode for Inserting Nodes
15
10
7 null
Otherwise (if the new node will not be first):
Start by setting a pointer named previous_ptr to point to the node which is just before the new node's position.
In this example, the new node will be the second node
previous_ptr
Trang 30Pseudocode for Inserting Nodes
15
10
7 null
head_ptr
Otherwise (if the new node will not be first):
Start by setting a pointer named previous_ptr to point to the node which is just before the new node's position
Trang 31Pseudocode for Inserting Nodes
15
10
7 null
head_ptr
Otherwise (if the new node will not be first):
Start by setting a pointer named previous_ptr to point to the node which is just before the new node's position
This pointer is called
previous_ptr->link_field
(although this name may
be private to the node)
Trang 32Pseudocode for Inserting Nodes
15
10
7 null
head_ptr
Otherwise (if the new node will not be first):
Start by setting a pointer named previous_ptr to point to the node which is just before the new node's position
previous_ptr->link_field
points to the head
of a small linked list, with 10 and 7
previous_ptr
Trang 33Pseudocode for Inserting Nodes
15
10
7 null
head_ptr
Otherwise (if the new node will not be first):
Start by setting a pointer named previous_ptr to point to the node which is just before the new node's position.
The new node must
be inserted at the front of this small
Trang 34Pseudocode for Inserting Nodes
15
10
7 null
head_ptr
Otherwise (if the new node will not be first):
Start by setting a pointer named previous_ptr to point to the node which is just before the new node's position. 13
What might cause
this statement to
fail to compile?
previous_ptr
list_head_insert(previous_ptr->link_field, entry);
Trang 35Pseudocode for Inserting Nodes
15
10
7 null
head_ptr
Otherwise (if the new node will not be first):
Start by setting a pointer named previous_ptr to point to the node which is just before the new node's position. 13
Use a node member
function to get the
link field if
needed.
previous_ptr
list_head_insert(previous_ptr->link( ), entry);
Trang 36Pseudocode for Inserting Nodes
Determine whether the new node will be the first node in the linked list If so, then there is only one step:
list_head_insert(head_ptr, entry);
Otherwise (if the new node will not be first):
Set a pointer named previous_ptr to point to the node which is just before the new node's position.
Make the function call:
list_head_insert(previous_ptr->link( ), entry);
Trang 37Pseudocode for Inserting Nodes
The process of adding a new node in the middle
of a list can also be incorporated as a separate function This function is called list_insert in the linked list toolkit of Section 5.2
Trang 38Pseudocode for Removing Nodes
Nodes often need to be removed from a linked list
As with insertion, there is a technique for removing
a node from the front of a list, and a technique for removing a node from elsewhere
We’ll look at the pseudocode for removing a node from the front of a linked list
Trang 39Removing the Head Node
Trang 40Removing the Head Node
linked list.
Trang 41Removing the Head Node
Trang 42Removing the Head Node
Trang 43Removing the Head Node
Here’s what the linked list looks like after the removal finishes.
null
Trang 44It is easy to insert a node at the front of a list.
The linked list toolkit also provides a function for inserting a new node elsewhere
It is easy to remove a node at the front of a list
The linked list toolkit also provides a function for removing a node elsewhere you should read
about this function and the other functions of the toolkit
Summary
Trang 45T HE E ND
Presentation copyright 2010, Addison Wesley Longman,
For use with Data Structures and Other Objects Using C++
by Michael Main and Walter Savitch.
Some artwork in the presentation is used with permission from Presentation Task Force
(copyright New Vision Technologies Inc) and Corel Gallery Clipart Catalog (copyright
Corel Corporation, 3G Graphics Inc, Archive Arts, Cartesia Software, Image Club
Graphics Inc, One Mile Up Inc, TechPool Studios, Totem Graphics Inc).
Students and instructors who use Data Structures and Other Objects Using C++ are welcome
to use this presentation however they see fit, so long as this copyright notice remains
intact.