SlideShare a Scribd company logo
Starting Out with C++, 3rd
Edition
1
Linked Lists
Starting Out with C++, 3rd
Edition
2
17.1 Introduction to the Linked
List ADT
• A linked list is a series of connected nodes,
where each node is a data structure.
• A linked list can grow or shrink in size as
the program runs
Starting Out with C++, 3rd
Edition
3
Advantages of Linked Lists
over Arrays and vectors
• A linked list can easily grow or shrink in
size.
• Insertion and deletion of nodes is quicker
with linked lists than with vectors.
Starting Out with C++, 3rd
Edition
4
The composition of a Linked
List
• Each node in a linked list contains one or
more members that represent data.
• In addition to the data, each node contains a
pointer, which can point to another node.
Starting Out with C++, 3rd
Edition
5
The composition of a Linked
List
• A linked list is called "linked" because each
node in the series has a pointer that points
to the next node in the list.
Starting Out with C++, 3rd
Edition
6
Declarations
• First you must declare a data structure that
will be used for the nodes. For example, the
following struct could be used to create
a list where each node holds a float:
struct ListNode
{
float value;
struct ListNode *next;
};
Starting Out with C++, 3rd
Edition
7
Declarations
• The next step is to declare a pointer to serve
as the list head, as shown below.
ListNode *head;
• Once you have declared a node data
structure and have created a NULL head
pointer, you have an empty linked list.
• The next step is to implement operations
with the list.
Starting Out with C++, 3rd
Edition
8
17.2 Linked List Operations
• We will use the following class declaration (on the
next slide), which is stored in FloatList.h.
Starting Out with C++, 3rd
Edition
9
class FloatList
{
private:
// Declare a structure for the list
struct ListNode
{
float value;
struct ListNode *next;
};
ListNode *head; // List head pointer
public:
FloatList(void) // Constructor
{ head = NULL; }
~FloatList(void); // Destructor
void appendNode(float);
void insertNode(float);
void deleteNode(float);
void displayList(void);
};
Starting Out with C++, 3rd
Edition
10
Appending a Node to the List
• To append a node to a linked list means to add the node to
the end of the list.
• The pseudocode is shown below. The C++ code follows.
Create a new node.
Store data in the new node.
If there are no nodes in the list
Make the new node the first node.
Else
Traverse the List to Find the last node.
Add the new node to the end of the list.
End If.
Starting Out with C++, 3rd
Edition
11
void FloatList::appendNode(float num)
{
ListNode *newNode, *nodePtr;
// Allocate a new node & store num
newNode = new ListNode;
newNode->value = num;
newNode->next = NULL;
// If there are no nodes in the list
// make newNode the first node
if (!head)
head = newNode;
else // Otherwise, insert newNode at end
{
// Initialize nodePtr to head of list
nodePtr = head;
// Find the last node in the list
while (nodePtr->next)
nodePtr = nodePtr->next;
// Insert newNode as the last node
nodePtr->next = newNode;
}
}
Starting Out with C++, 3rd
Edition
12
Program 17-1
// This program demonstrates a simple append
// operation on a linked list.
#include <iostream.h>
#include "FloatList.h”
void main(void)
{
FloatList List;
list.appendNode(2.5);
list.appendNode(7.9);
list.appendNode(12.6);
}
(This program displays no output.)
Starting Out with C++, 3rd
Edition
13
Stepping Through the Program
• The head pointer is declared as a global variable.
head is automatically initialized to 0 (NULL),
which indicates that the list is empty.
• The first call to appendNode passes 2.5 as the
argument. In the following statements, a new node
is allocated in memory, 2.5 is copied into its
value member, and NULL is assigned to the
node's next pointer.
Starting Out with C++, 3rd
Edition
14
newNode = new ListNode;
newNode->value = num;
newNode->next = nULL;
Starting Out with C++, 3rd
Edition
15
The next statement to execute is the following if statement.
if (!head)
head = newNode;
There are no more statements to execute, so control returns to
function main.
Starting Out with C++, 3rd
Edition
16
In the second call to appendNode, 7.9 is passed as the argument.
Once again, the first three statements in the function create a new
node, store the argument in the node's value member, and assign
its next pointer to NULL.
Starting Out with C++, 3rd
Edition
17
Since head no longer points to NULL, the else part of the if statement executes:
else // Otherwise, insert newNode at end
{
// Initialize nodePtr to head of list
nodePtr = head;
// Find the last node in the list
while (nodePtr->next)
nodePtr = nodePtr->next;
// Insert newNode as the last node
nodePtr->next = newNode;
}
Starting Out with C++, 3rd
Edition
18
nodePtr is already at the end of the list, so the while loop
immediately terminates. The last statement, nodePtr->next =
newNode; causes nodePtr->next to point to the new node.
This inserts newNode at the end of the list.
Starting Out with C++, 3rd
Edition
19
The third time appendNode is called, 12.6 is passed as the
argument. Once again, the first three statements create a node with
the argument stored in the value member.
Starting Out with C++, 3rd
Edition
20
next, the else part of the if statement executes. As before,
nodePtr is made to point to the same node as head.
Starting Out with C++, 3rd
Edition
21
Since nodePtr->next is not NULL, the while loop will
execute. After its first iteration, nodePtr will point to the second
node in the list.
Starting Out with C++, 3rd
Edition
22
The while loop's conditional test will fail after the first iteration
because nodePtr->next now points to NULL. The last
statement, nodePtr->next = newNode; causes
nodePtr->next to point to the new node. This inserts newNode
at the end of the list
The figure above depicts the final state of the linked list.
Starting Out with C++, 3rd
Edition
23
Traversing the List
• The displayList member function traverses the list,
displaying the value member of each node. The
following pseudocode represents the algorithm. The C++
code for the member function follows on the next slide.
Assign List head to node pointer.
While node pointer is not NULL
Display the value member of the node pointed to by node pointer.
Assign node pointer to its own next member.
End While.
Starting Out with C++, 3rd
Edition
24
void FloatList::displayList(void)
{
ListNode *nodePtr;
nodePtr = head;
while (nodePtr)
{
cout << nodePtr->value << endl;
nodePtr = nodePtr->next;
}
}
Starting Out with C++, 3rd
Edition
25
Program 17-2
// This program calls the displayList member function.
// The funcion traverses the linked list displaying
// the value stored in each node.
#include <iostream.h>
#include "FloatList.h"
void main(void)
{
FloatList List;
list.appendNode(2.5);
list.appendNode(7.9);
list.appendNode(12.6);
list.displayList();
}
Starting Out with C++, 3rd
Edition
26
Program 17-2 Output
2.5
7.9
12.6
Starting Out with C++, 3rd
Edition
27
Inserting a Node
• Using the listNode structure again, the
pseudocode on the next slide shows an
algorithm for finding a new node’s proper
position in the list and inserting there.
• The algorithm assumes the nodes in the list
are already in order.
Starting Out with C++, 3rd
Edition
28
Create a new node.
Store data in the new node.
If there are no nodes in the list
Make the new node the first node.
Else
Find the first node whose value is greater than or equal
the new value, or the end of the list (whichever is first).
Insert the new node before the found node, or at the end of
the list if no node was found.
End If.
Starting Out with C++, 3rd
Edition
29
The code for the traversal algorithm is shown below. (As before, num
holds the value being inserted into the list.)
// Initialize nodePtr to head of list
nodePtr = head;
// Skip all nodes whose value member is less
// than num.
while (nodePtr != NULL && nodePtr->value < num)
{
previousNode = nodePtr;
nodePtr = nodePtr->next;
}
The entire insertNode function begins on the next slide.
Starting Out with C++, 3rd
Edition
30
void FloatList::insertNode(float num)
{
ListNode *newNode, *nodePtr, *previousNode;
// Allocate a new node & store Num
newNode = new ListNode;
newNode->value = num;
// If there are no nodes in the list
// make newNode the first node
if (!head)
{
head = newNode;
newNode->next = NULL;
}
else // Otherwise, insert newNode.
{
// Initialize nodePtr to head of list
nodePtr = head;
// Skip all nodes whose value member is less
// than num.
while (nodePtr != NULL && nodePtr->value < num)
{
previousNode = nodePtr;
nodePtr = nodePtr->next;
}
Continued on next slide…
Starting Out with C++, 3rd
Edition
31
// If the new mode is to be the 1st in the list,
// insert it before all other nodes.
if (previousNode == NULL)
{
head = newNode;
newNode-> = nodePtr;
}
else
{
previousNode->next = newNode;
newNode->next = nodePtr;
}
}
}
Continued from previous slide.
Starting Out with C++, 3rd
Edition
32
Program 17-3
// This program calls the displayList member function.
// The function traverses the linked list displaying
// the value stored in each node.
#include <iostream.h>
#include "FloatList.h”
void main(void)
{
FloatList list;
// Build the list
list.appendNode(2.5);
list.appendNode(7.9);
list.appendNode(12.6);
// Insert a node in the middle
// of the list.
list.insertNode(10.5);
// Dispay the list
list.displayList();
}
Starting Out with C++, 3rd
Edition
33
Program 17-3 Output
2.5
7.9
10.5
12.6
Starting Out with C++, 3rd
Edition
34
In insertNode, a new node is created and the function argument is
copied to its value member. Since the list already has nodes stored
in it, the else part of the if statement will execute. It begins by
assigning nodePtr to head.
Starting Out with C++, 3rd
Edition
35
Since nodePtr is not NULL and nodePtr->value is less than
num, the while loop will iterate. During the iteration,
previousNode will be made to point to the node that nodePtr is
pointing to. nodePtr will then be advanced to point to the next
node.
Starting Out with C++, 3rd
Edition
36
Once again, the loop performs its test. Since nodePtr is not NULL
and nodePtr->value is less than num, the loop will iterate a
second time. During the second iteration, both previousNode and
nodePtr are advanced by one node in the list.
Starting Out with C++, 3rd
Edition
37
This time, the loop's test will fail because nodePtr is not less than
num. The statements after the loop will execute, which cause
previousNode->next to point to newNode, and
newNode->next to point to nodePtr.
If you follow the links, from the head pointer to the NULL, you will
see that the nodes are stored in the order of their value members.
Starting Out with C++, 3rd
Edition
38
Deleting a Node
• Deleting a node from a linked list requires
two steps:
– Remove the node from the list without breaking
the links created by the next pointers
– Deleting the node from memory
• The deleteNode function begins on the
next slide.
Starting Out with C++, 3rd
Edition
39
void FloatList::deleteNode(float num)
{
ListNode *nodePtr, *previousNode;
// If the list is empty, do nothing.
if (!head)
return;
// Determine if the first node is the one.
if (head->value == num)
{
nodePtr = head->next;
delete head;
head = nodePtr;
}
Continued on next slide…
Starting Out with C++, 3rd
Edition
40
else
{
// Initialize nodePtr to head of list
nodePtr = head;
// Skip all nodes whose value member is
// not equal to num.
while (nodePtr != NULL && nodePtr->value != num)
{
previousNode = nodePtr;
nodePtr = nodePtr->next;
}
// Link the previous node to the node after
// nodePtr, then delete nodePtr.
previousNode->next = nodePtr->next;
delete nodePtr;
}
}
Continued from previous slide.
Starting Out with C++, 3rd
Edition
41
Program 17-4
// This program demonstrates the deleteNode member function
#include <iostream.h>
#include "FloatList.h“
void main(void)
{
FloatList list;
// Build the list
list.appendNode(2.5);
list.appendNode(7.9);
list.appendNode(12.6);
cout << "Here are the initial values:n";
list.displayList();
cout << endl;
cout << "Now deleting the node in the middle.n";
cout << "Here are the nodes left.n";
list.deleteNode(7.9);
list.displayList();
cout << endl;
Continued on next slide…
Starting Out with C++, 3rd
Edition
42
cout << "Now deleting the last node.n";
cout << "Here are the nodes left.n";
list.deleteNode(12.6);
list.displayList();
cout << endl;
cout << "Now deleting the only remaining node.n";
cout << "Here are the nodes left.n";
list.deleteNode(2.5);
list.displayList();
}
Continued from previous slide.
Starting Out with C++, 3rd
Edition
43
Program Output
Here are the initial values:
2.5
7.9
12.6
Now deleting the node in the middle.
Here are the nodes left.
2.5
12.6
Now deleting the last node.
Here are the nodes left.
2.5
Now deleting the only remaining node.
Here are the nodes left.
Starting Out with C++, 3rd
Edition
44
Look at the else part of the second if statement. This is where the
function will perform its action since the list is not empty, and the
first node does not contain the value 7.9. Just like insertNode,
this function uses nodePtr and previousNode to traverse the
list. The while loop terminates when the value 7.9 is located. At this
point, the list and the other pointers will be in the state depicted in
the figure below.
Starting Out with C++, 3rd
Edition
45
next, the following statement executes.
previousNode->next = nodePtr->next;
The statement above causes the links in the list to bypass the node
that nodePtr points to. Although the node still exists in memory, this
removes it from the list.
The last statement uses the delete operator to complete the total
deletion of the node.
Starting Out with C++, 3rd
Edition
46
Destroying the List
• The class's destructor should release all the
memory used by the list.
• It does so by stepping through the list,
deleting each node one-by-one. The code is
shown on the next slide.
Starting Out with C++, 3rd
Edition
47
FloatList::~FloatList(void)
{
ListNode *nodePtr, *nextNode;
nodePtr = head;
while (nodePtr != NULL)
{
nextNode = nodePtr->next;
delete nodePtr;
nodePtr = nextNode;
}
}
Notice the use of nextNode instead of previousNode. The
nextNode pointer is used to hold the position of the next node in
the list, so it will be available after the node pointed to by nodePtr
is deleted.
Starting Out with C++, 3rd
Edition
48
17.3 A Linked List Template
#ifndef LINKEDLIST_H
#define LINKEDLIST_H
template <class T>
class LinkedList
{
private:
// Declare a structure for the list
struct ListNode
{
T value;
struct ListNode *next;
};
ListNode *head; // List head pointer
Continued on next slide…
Starting Out with C++, 3rd
Edition
49
public:
LinkedList(void) // Constructor
{ head = NULL; }
~LinkedList(void); // Destructor
void appendNode(T);
void insertNode(T);
void deleteNode(T);
void displayList(void);
};
// appendNode appends a node containing the
// value pased into num, to the end of the list.
template <class T>
void LinkedList<T>::AppendNode(T num)
{
ListNode *newNode, *nodePtr;
// Allocate a new node & store num
newNode = new ListNode;
newNode->value = num;
newNode->next = NULL;
Continued on next slide…
Starting Out with C++, 3rd
Edition
50
// If there are no nodes in the list
// make newNode the first node
if (!head)
head = newNode;
else // Otherwise, insert newNode at end
{
// Initialize nodePtr to head of list
nodePtr = head;
// Find the last node in the list
while (nodePtr->next)
nodePtr = nodePtr->next;
// Insert newNode as the last node
nodePtr->next = newNode;
}
}
Continued on next slide…
Starting Out with C++, 3rd
Edition
51
// DisplayList shows the value
// stored in each node of the linked list
// pointed to by head.
template <class T>
void LinkedList<T>::DisplayList(void)
{
ListNode *nodePtr;
nodePtr = head;
while (nodePtr)
{
cout << nodePtr->value << endl;
nodePtr = nodePtr->next;
}
}
Continued on next slide…
Starting Out with C++, 3rd
Edition
52
// The insertNode function inserts a node with
// num copied to its value member.
template <class T>
void LinkedList<T>::insertNode(T num)
{
ListNode *newNode, *nodePtr, *previousNode;
// Allocate a new node & store Num
newNode = new ListNode;
newNode->value = num;
// If there are no nodes in the list
// make newNode the first node
if (!head)
{
head = newNode;
newNode->next = NULL;
}
Continued on next slide…
Starting Out with C++, 3rd
Edition
53
else // Otherwise, insert newNode at end
{
// Initialize nodePtr to head of list
nodePtr = head;
// Skip all nodes whose value member is less
// than num.
while (nodePtr != NULL && nodePtr->value < num)
{
previousNode = nodePtr;
nodePtr = nodePtr->next;
}
// Insert the node after the one pointed to
// by previousNode and before the one pointed to
// by nodePtr.
previousNode->next = newNode;
newNode->next = nodePtr;
}
}
Continued on next slide…
Starting Out with C++, 3rd
Edition
54
// The deleteNode function searches for a node
// with Num as its value. The node, if found, is
// deleted from the list and from memory.
template <class T>
void LinkedList<T>::deleteNode(T num)
{
ListNode *nodePtr, *previousNode;
// If the list is empty, do nothing.
if (!head)
return;
// Determine if the first node is the one.
if (head->value == num)
{
nodePtr = head->next;
delete head;
head = nodePtr;
} Continued on next slide…
Starting Out with C++, 3rd
Edition
55
else
{
// Initialize nodePtr to head of list
nodePtr = head;
// Skip all nodes whose value member is
// not equal to num.
while (nodePtr != NULL && nodePtr->value != num)
{
previousNode = nodePtr;
nodePtr = nodePtr->next;
}
// Link the previous node to the node after
// nodePtr, then delete nodePtr.
previousNode->next = nodePtr->next;
delete nodePtr;
}
}
Continued on next slide…
Starting Out with C++, 3rd
Edition
56
// Destructor
// This function deletes every node in the list.
template <class T>
LinkedList<T>::~LinkedList(void)
{
ListNode *nodePtr, *nextNode;
nodePtr = head;
while (nodePtr != NULL)
{
nextNode = nodePtr->next;
delete nodePtr;
nodePtr = nextNode;
}
}
#endif
Starting Out with C++, 3rd
Edition
57
Program 17-5
// This program demonstrates the linked list template.
#include <iostream.h>
#include "LinkedList.h“
void main(void)
{
LinkedList<int> list;
// Build the list
list.appendNode(2);
list.appendNode(4);
list.appendNode(6);
cout << "Here are the initial values:n";
list.displayList();
cout << endl;
Continued on next slide…
Starting Out with C++, 3rd
Edition
58
cout << "Now inserting the value 5.n";
list.insertNode(5);
cout << "Here are the nodes now.n";
list.displayList();
cout << endl;
cout << "Now deleting the last node.n";
list.deleteNode(6);
cout << "Here are the nodes left.n";
list.displayList();
}
Starting Out with C++, 3rd
Edition
59
Program Output
Here are the initial values:
2
4
6
Now inserting the value 5.
Here are the nodes now.
2
4
5
6
Now deleting the last node.
Here are the nodes left.
2
4
5
Starting Out with C++, 3rd
Edition
60
17.4 Variations of the Linked List
The Doubly-Linked List
Starting Out with C++, 3rd
Edition
61
17.4 Variations of the Linked
List
The Circular Linked List
Starting Out with C++, 3rd
Edition
62
17.5 The STL list Container
• The list container, found in the Standard
Template Library, is a template version of a
doubly linked list.
• STL lists can insert elements, or add elements
to their front quicker than vectors can, because
lists do not have to shift the other elements.
• lists are also efficient at adding elements at
their back because they have a built-in pointer to
the last element in the list (no traversal
required).
Starting Out with C++, 3rd
Edition
63
Member Function Examples & Description
back cout << list.back() << endl;
The back member function returns a reference to the
last element in the list.
erase list.erase(iter);
list.erase(firstIter, lastIter)
The first example causes the list element pointed to by the iterator
iter to be removed. The second example causes all of the list
elements from firstIter to lastIter to be removed.
empty if (list.empty())
The empty member function returns true if the list is empty. If
the list has elements, it returns false.
Starting Out with C++, 3rd
Edition
64
Member Function Examples & Description
end iter = list.end();
end returns a bi-directional iterator to the end of the list.
front cout << list.front() << endl;
front returns a reference to the first element of the list.
insert list.insert(iter, x)
The insert member function inserts an element into the list. The
example shown above inserts an element with the value x, just before
the element pointed to by iter.
merge list1.merge(list2);
merge inserts all the items in list2 into list1. list1 is
expanded to accommodate the new elements plus any elements
already stored in list1. merge expects both lists to be sorted.
When list2 is inserted into list1, the elements are inserted into
their correct position, so the resulting list is also sorted.
Starting Out with C++, 3rd
Edition
65
Member Function Examples & Description
pop_back list.pop_back();
pop_back removes the last element of the list.
pop_front list.pop_front();
pop_front removes the first element of the list.
push_back list.push_back(x);
push_back inserts an element with value x at the end of
the list.
push_front list.push_front(x);
push_front inserts an element with value x at the beginning of the
list.
reverse list.reverse();
reverse reverses the order in which the elements appear in the list.
Starting Out with C++, 3rd
Edition
66
Member Function Examples & Description
size() Returns the number of elements in the list.
swap list1.swap(List2)
The swap member function swaps the elements stored in two
lists. For example, assuming list1 and list2 are lists, the
statement shown above will exchange the values in the two.
unique list.unique();
unique removes any element that has the same value as the element
before it.
Starting Out with C++, 3rd
Edition
67
Program 17-6
// This program demonstrates the STL list container.
#include <iostream.h>
#include <list> // Include the list header
using namespace std; // Required by some compilers
void main(void)
{
list<int> myList;
list<int>::iterator iter;
// Add values to the list
for (int x = 0; x < 100; x += 10)
myList.push_back(x);
// Display the values
for (iter = myList.begin(); iter != myList.end(); iter++)
cout << *iter << " ";
cout << endl;
Continued on next slide…
Starting Out with C++, 3rd
Edition
68
// Now reverse the order of the elements
myList.reverse();
// Display the values again
for (iter = myList.begin(); iter != myList.end(); iter++)
cout << *iter << " ";
cout << endl;
}
Program Output
0 10 20 30 40 50 60 70 80 90
90 80 70 60 50 40 30 20 10 0

More Related Content

PPT
Mi 103 linked list
Amit Vats
 
PDF
Linked List Static and Dynamic Memory Allocation
Prof Ansari
 
PPTX
Linked lists in Data Structure
Muhazzab Chouhadry
 
PPTX
Data Structures - Lecture 7 [Linked List]
Muhammad Hammad Waseem
 
PPT
Operations on linked list
Sumathi Kv
 
PPTX
Lecture 6: linked list
Vivek Bhargav
 
PPTX
Linked list
RahulGandhi110
 
PPS
Single linked list
jasbirsingh chauhan
 
Mi 103 linked list
Amit Vats
 
Linked List Static and Dynamic Memory Allocation
Prof Ansari
 
Linked lists in Data Structure
Muhazzab Chouhadry
 
Data Structures - Lecture 7 [Linked List]
Muhammad Hammad Waseem
 
Operations on linked list
Sumathi Kv
 
Lecture 6: linked list
Vivek Bhargav
 
Linked list
RahulGandhi110
 
Single linked list
jasbirsingh chauhan
 

What's hot (19)

PPSX
Data Structure (Double Linked List)
Adam Mukharil Bachtiar
 
PPT
linked list
Narendra Chauhan
 
PPTX
Doubly Linked List || Operations || Algorithms
Shubham Sharma
 
PPTX
Doubly & Circular Linked Lists
Afaq Mansoor Khan
 
PPT
Algo>ADT list & linked list
Ain-ul-Moiz Khawaja
 
PPT
linked list
Shaista Qadir
 
PPTX
Linked list
akshat360
 
PPT
Singly link list
Rojin Khadka
 
PPT
Unit ii(dsc++)
Durga Devi
 
PPTX
CSE240 Doubly Linked Lists
Garrett Gutierrez
 
PPTX
Linear data structure concepts
Akila Krishnamoorthy
 
PPT
Linked list
Trupti Agrawal
 
PPTX
Link list presentation slide(Daffodil international university)
shah alom
 
PPSX
Data Structure (Dynamic Array and Linked List)
Adam Mukharil Bachtiar
 
PPTX
linked list using c
Venkat Reddy
 
PPTX
Linked list
Arbind Mandal
 
PPT
10 Linked Lists Sacks and Queues
Praveen M Jigajinni
 
PPT
Link list part 1
Anaya Zafar
 
Data Structure (Double Linked List)
Adam Mukharil Bachtiar
 
linked list
Narendra Chauhan
 
Doubly Linked List || Operations || Algorithms
Shubham Sharma
 
Doubly & Circular Linked Lists
Afaq Mansoor Khan
 
Algo>ADT list & linked list
Ain-ul-Moiz Khawaja
 
linked list
Shaista Qadir
 
Linked list
akshat360
 
Singly link list
Rojin Khadka
 
Unit ii(dsc++)
Durga Devi
 
CSE240 Doubly Linked Lists
Garrett Gutierrez
 
Linear data structure concepts
Akila Krishnamoorthy
 
Linked list
Trupti Agrawal
 
Link list presentation slide(Daffodil international university)
shah alom
 
Data Structure (Dynamic Array and Linked List)
Adam Mukharil Bachtiar
 
linked list using c
Venkat Reddy
 
Linked list
Arbind Mandal
 
10 Linked Lists Sacks and Queues
Praveen M Jigajinni
 
Link list part 1
Anaya Zafar
 
Ad

Viewers also liked (8)

PPTX
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
Dheeraj Kataria
 
PDF
Discrete Mathematics S. Lipschutz, M. Lipson And V. H. Patil
widespreadpromotion
 
PPTX
10. Search Tree - Data Structures using C++ by Varsha Patil
widespreadpromotion
 
PPTX
3. Stack - Data Structures using C++ by Varsha Patil
widespreadpromotion
 
PPTX
7. Tree - Data Structures using C++ by Varsha Patil
widespreadpromotion
 
PPTX
5. Queue - Data Structures using C++ by Varsha Patil
widespreadpromotion
 
PPTX
1. Fundamental Concept - Data Structures using C++ by Varsha Patil
widespreadpromotion
 
PPTX
6. Linked list - Data Structures using C++ by Varsha Patil
widespreadpromotion
 
Types Of Recursion in C++, Data Stuctures by DHEERAJ KATARIA
Dheeraj Kataria
 
Discrete Mathematics S. Lipschutz, M. Lipson And V. H. Patil
widespreadpromotion
 
10. Search Tree - Data Structures using C++ by Varsha Patil
widespreadpromotion
 
3. Stack - Data Structures using C++ by Varsha Patil
widespreadpromotion
 
7. Tree - Data Structures using C++ by Varsha Patil
widespreadpromotion
 
5. Queue - Data Structures using C++ by Varsha Patil
widespreadpromotion
 
1. Fundamental Concept - Data Structures using C++ by Varsha Patil
widespreadpromotion
 
6. Linked list - Data Structures using C++ by Varsha Patil
widespreadpromotion
 
Ad

Similar to Ch17 (20)

PDF
Please help solve this in C++ So the program is working fin.pdf
ankit11134
 
PPTX
C Exam Help
Programming Exam Help
 
PDF
Lec-4_Linked-List (1).pdf
KylaMaeGarcia1
 
PDF
This assignment and the next (#5) involve design and development of a.pdf
EricvtJFraserr
 
PDF
Cpp lernaufgabe linked_list
Ibrahim El-Torbany
 
DOCX
C++ Please write the whole code that is needed for this assignment- wr.docx
BrianGHiNewmanv
 
PPTX
C Homework Help
Programming Homework Help
 
PPT
Array linked list.ppt
Waf1231
 
PPT
Savitch Ch 13
Terry Yoast
 
PDF
In C++ please, do not alter node.hStep 1 Inspect the Node.h file.pdf
stopgolook
 
PPT
Savitch ch 13
Terry Yoast
 
PDF
Chapter 3 Linkedlist Data Structure .pdf
Axmedcarb
 
PDF
Sorted number list implementation with linked listsStep 1 Inspec.pdf
almaniaeyewear
 
PPT
List
Amit Vats
 
PPTX
linkedlist-130914084342-phpapp02.pptx
MeghaKulkarni27
 
PPT
MO 2020 DS Applications of Linked List 1 AB.ppt
shashankbhadouria4
 
PDF
Doc 20180130-wa0003
HarithaRanasinghe
 
PPTX
singlelinkedlistasdfghzxcvbnmqwertyuiopa
rabailasghar3
 
PDF
C++ Doubly-Linked ListsThe goal of the exercise is to implement a.pdf
poblettesedanoree498
 
PDF
Need done for Date Structures please! 4-18 LAB- Sorted number list imp.pdf
info114
 
Please help solve this in C++ So the program is working fin.pdf
ankit11134
 
C Exam Help
Programming Exam Help
 
Lec-4_Linked-List (1).pdf
KylaMaeGarcia1
 
This assignment and the next (#5) involve design and development of a.pdf
EricvtJFraserr
 
Cpp lernaufgabe linked_list
Ibrahim El-Torbany
 
C++ Please write the whole code that is needed for this assignment- wr.docx
BrianGHiNewmanv
 
C Homework Help
Programming Homework Help
 
Array linked list.ppt
Waf1231
 
Savitch Ch 13
Terry Yoast
 
In C++ please, do not alter node.hStep 1 Inspect the Node.h file.pdf
stopgolook
 
Savitch ch 13
Terry Yoast
 
Chapter 3 Linkedlist Data Structure .pdf
Axmedcarb
 
Sorted number list implementation with linked listsStep 1 Inspec.pdf
almaniaeyewear
 
List
Amit Vats
 
linkedlist-130914084342-phpapp02.pptx
MeghaKulkarni27
 
MO 2020 DS Applications of Linked List 1 AB.ppt
shashankbhadouria4
 
Doc 20180130-wa0003
HarithaRanasinghe
 
singlelinkedlistasdfghzxcvbnmqwertyuiopa
rabailasghar3
 
C++ Doubly-Linked ListsThe goal of the exercise is to implement a.pdf
poblettesedanoree498
 
Need done for Date Structures please! 4-18 LAB- Sorted number list imp.pdf
info114
 

More from Abbott (13)

PPT
Chap007 MIS (Management Information System)
Abbott
 
PPT
Chap006 MIS (Management Information System)
Abbott
 
PPT
Chap005 MIS (Management Information System)
Abbott
 
PPT
Chap004 MIS (Management Information System)
Abbott
 
PPT
Chap003 MIS (Management Information System)
Abbott
 
PPT
Chap002 (Management Information System)
Abbott
 
PPT
Chap001 MIS (Management Information System)
Abbott
 
PDF
Stacks and queues
Abbott
 
PDF
Practice programs
Abbott
 
PDF
linked list
Abbott
 
DOC
Data structure lecture 2
Abbott
 
PDF
Data structure lecture 2 (pdf)
Abbott
 
PPT
Array 2
Abbott
 
Chap007 MIS (Management Information System)
Abbott
 
Chap006 MIS (Management Information System)
Abbott
 
Chap005 MIS (Management Information System)
Abbott
 
Chap004 MIS (Management Information System)
Abbott
 
Chap003 MIS (Management Information System)
Abbott
 
Chap002 (Management Information System)
Abbott
 
Chap001 MIS (Management Information System)
Abbott
 
Stacks and queues
Abbott
 
Practice programs
Abbott
 
linked list
Abbott
 
Data structure lecture 2
Abbott
 
Data structure lecture 2 (pdf)
Abbott
 
Array 2
Abbott
 

Recently uploaded (20)

PDF
The Evolution of KM Roles (Presented at Knowledge Summit Dublin 2025)
Enterprise Knowledge
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PDF
Architecture of the Future (09152021)
EdwardMeyman
 
PDF
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
PPTX
Coupa-Overview _Assumptions presentation
annapureddyn
 
PDF
Event Presentation Google Cloud Next Extended 2025
minhtrietgect
 
PDF
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
PPTX
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
PDF
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
PDF
Unlocking the Future- AI Agents Meet Oracle Database 23ai - AIOUG Yatra 2025.pdf
Sandesh Rao
 
PDF
REPORT: Heating appliances market in Poland 2024
SPIUG
 
PDF
Cloud-Migration-Best-Practices-A-Practical-Guide-to-AWS-Azure-and-Google-Clou...
Artjoker Software Development Company
 
PDF
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
 
PDF
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
PDF
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
PDF
Beyond Automation: The Role of IoT Sensor Integration in Next-Gen Industries
Rejig Digital
 
PPTX
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
PDF
Software Development Company | KodekX
KodekX
 
PPTX
Comunidade Salesforce São Paulo - Desmistificando o Omnistudio (Vlocity)
Francisco Vieira Júnior
 
PDF
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
The Evolution of KM Roles (Presented at Knowledge Summit Dublin 2025)
Enterprise Knowledge
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
Architecture of the Future (09152021)
EdwardMeyman
 
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
Coupa-Overview _Assumptions presentation
annapureddyn
 
Event Presentation Google Cloud Next Extended 2025
minhtrietgect
 
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
Unlocking the Future- AI Agents Meet Oracle Database 23ai - AIOUG Yatra 2025.pdf
Sandesh Rao
 
REPORT: Heating appliances market in Poland 2024
SPIUG
 
Cloud-Migration-Best-Practices-A-Practical-Guide-to-AWS-Azure-and-Google-Clou...
Artjoker Software Development Company
 
SparkLabs Primer on Artificial Intelligence 2025
SparkLabs Group
 
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
Beyond Automation: The Role of IoT Sensor Integration in Next-Gen Industries
Rejig Digital
 
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
Software Development Company | KodekX
KodekX
 
Comunidade Salesforce São Paulo - Desmistificando o Omnistudio (Vlocity)
Francisco Vieira Júnior
 
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 

Ch17

  • 1. Starting Out with C++, 3rd Edition 1 Linked Lists
  • 2. Starting Out with C++, 3rd Edition 2 17.1 Introduction to the Linked List ADT • A linked list is a series of connected nodes, where each node is a data structure. • A linked list can grow or shrink in size as the program runs
  • 3. Starting Out with C++, 3rd Edition 3 Advantages of Linked Lists over Arrays and vectors • A linked list can easily grow or shrink in size. • Insertion and deletion of nodes is quicker with linked lists than with vectors.
  • 4. Starting Out with C++, 3rd Edition 4 The composition of a Linked List • Each node in a linked list contains one or more members that represent data. • In addition to the data, each node contains a pointer, which can point to another node.
  • 5. Starting Out with C++, 3rd Edition 5 The composition of a Linked List • A linked list is called "linked" because each node in the series has a pointer that points to the next node in the list.
  • 6. Starting Out with C++, 3rd Edition 6 Declarations • First you must declare a data structure that will be used for the nodes. For example, the following struct could be used to create a list where each node holds a float: struct ListNode { float value; struct ListNode *next; };
  • 7. Starting Out with C++, 3rd Edition 7 Declarations • The next step is to declare a pointer to serve as the list head, as shown below. ListNode *head; • Once you have declared a node data structure and have created a NULL head pointer, you have an empty linked list. • The next step is to implement operations with the list.
  • 8. Starting Out with C++, 3rd Edition 8 17.2 Linked List Operations • We will use the following class declaration (on the next slide), which is stored in FloatList.h.
  • 9. Starting Out with C++, 3rd Edition 9 class FloatList { private: // Declare a structure for the list struct ListNode { float value; struct ListNode *next; }; ListNode *head; // List head pointer public: FloatList(void) // Constructor { head = NULL; } ~FloatList(void); // Destructor void appendNode(float); void insertNode(float); void deleteNode(float); void displayList(void); };
  • 10. Starting Out with C++, 3rd Edition 10 Appending a Node to the List • To append a node to a linked list means to add the node to the end of the list. • The pseudocode is shown below. The C++ code follows. Create a new node. Store data in the new node. If there are no nodes in the list Make the new node the first node. Else Traverse the List to Find the last node. Add the new node to the end of the list. End If.
  • 11. Starting Out with C++, 3rd Edition 11 void FloatList::appendNode(float num) { ListNode *newNode, *nodePtr; // Allocate a new node & store num newNode = new ListNode; newNode->value = num; newNode->next = NULL; // If there are no nodes in the list // make newNode the first node if (!head) head = newNode; else // Otherwise, insert newNode at end { // Initialize nodePtr to head of list nodePtr = head; // Find the last node in the list while (nodePtr->next) nodePtr = nodePtr->next; // Insert newNode as the last node nodePtr->next = newNode; } }
  • 12. Starting Out with C++, 3rd Edition 12 Program 17-1 // This program demonstrates a simple append // operation on a linked list. #include <iostream.h> #include "FloatList.h” void main(void) { FloatList List; list.appendNode(2.5); list.appendNode(7.9); list.appendNode(12.6); } (This program displays no output.)
  • 13. Starting Out with C++, 3rd Edition 13 Stepping Through the Program • The head pointer is declared as a global variable. head is automatically initialized to 0 (NULL), which indicates that the list is empty. • The first call to appendNode passes 2.5 as the argument. In the following statements, a new node is allocated in memory, 2.5 is copied into its value member, and NULL is assigned to the node's next pointer.
  • 14. Starting Out with C++, 3rd Edition 14 newNode = new ListNode; newNode->value = num; newNode->next = nULL;
  • 15. Starting Out with C++, 3rd Edition 15 The next statement to execute is the following if statement. if (!head) head = newNode; There are no more statements to execute, so control returns to function main.
  • 16. Starting Out with C++, 3rd Edition 16 In the second call to appendNode, 7.9 is passed as the argument. Once again, the first three statements in the function create a new node, store the argument in the node's value member, and assign its next pointer to NULL.
  • 17. Starting Out with C++, 3rd Edition 17 Since head no longer points to NULL, the else part of the if statement executes: else // Otherwise, insert newNode at end { // Initialize nodePtr to head of list nodePtr = head; // Find the last node in the list while (nodePtr->next) nodePtr = nodePtr->next; // Insert newNode as the last node nodePtr->next = newNode; }
  • 18. Starting Out with C++, 3rd Edition 18 nodePtr is already at the end of the list, so the while loop immediately terminates. The last statement, nodePtr->next = newNode; causes nodePtr->next to point to the new node. This inserts newNode at the end of the list.
  • 19. Starting Out with C++, 3rd Edition 19 The third time appendNode is called, 12.6 is passed as the argument. Once again, the first three statements create a node with the argument stored in the value member.
  • 20. Starting Out with C++, 3rd Edition 20 next, the else part of the if statement executes. As before, nodePtr is made to point to the same node as head.
  • 21. Starting Out with C++, 3rd Edition 21 Since nodePtr->next is not NULL, the while loop will execute. After its first iteration, nodePtr will point to the second node in the list.
  • 22. Starting Out with C++, 3rd Edition 22 The while loop's conditional test will fail after the first iteration because nodePtr->next now points to NULL. The last statement, nodePtr->next = newNode; causes nodePtr->next to point to the new node. This inserts newNode at the end of the list The figure above depicts the final state of the linked list.
  • 23. Starting Out with C++, 3rd Edition 23 Traversing the List • The displayList member function traverses the list, displaying the value member of each node. The following pseudocode represents the algorithm. The C++ code for the member function follows on the next slide. Assign List head to node pointer. While node pointer is not NULL Display the value member of the node pointed to by node pointer. Assign node pointer to its own next member. End While.
  • 24. Starting Out with C++, 3rd Edition 24 void FloatList::displayList(void) { ListNode *nodePtr; nodePtr = head; while (nodePtr) { cout << nodePtr->value << endl; nodePtr = nodePtr->next; } }
  • 25. Starting Out with C++, 3rd Edition 25 Program 17-2 // This program calls the displayList member function. // The funcion traverses the linked list displaying // the value stored in each node. #include <iostream.h> #include "FloatList.h" void main(void) { FloatList List; list.appendNode(2.5); list.appendNode(7.9); list.appendNode(12.6); list.displayList(); }
  • 26. Starting Out with C++, 3rd Edition 26 Program 17-2 Output 2.5 7.9 12.6
  • 27. Starting Out with C++, 3rd Edition 27 Inserting a Node • Using the listNode structure again, the pseudocode on the next slide shows an algorithm for finding a new node’s proper position in the list and inserting there. • The algorithm assumes the nodes in the list are already in order.
  • 28. Starting Out with C++, 3rd Edition 28 Create a new node. Store data in the new node. If there are no nodes in the list Make the new node the first node. Else Find the first node whose value is greater than or equal the new value, or the end of the list (whichever is first). Insert the new node before the found node, or at the end of the list if no node was found. End If.
  • 29. Starting Out with C++, 3rd Edition 29 The code for the traversal algorithm is shown below. (As before, num holds the value being inserted into the list.) // Initialize nodePtr to head of list nodePtr = head; // Skip all nodes whose value member is less // than num. while (nodePtr != NULL && nodePtr->value < num) { previousNode = nodePtr; nodePtr = nodePtr->next; } The entire insertNode function begins on the next slide.
  • 30. Starting Out with C++, 3rd Edition 30 void FloatList::insertNode(float num) { ListNode *newNode, *nodePtr, *previousNode; // Allocate a new node & store Num newNode = new ListNode; newNode->value = num; // If there are no nodes in the list // make newNode the first node if (!head) { head = newNode; newNode->next = NULL; } else // Otherwise, insert newNode. { // Initialize nodePtr to head of list nodePtr = head; // Skip all nodes whose value member is less // than num. while (nodePtr != NULL && nodePtr->value < num) { previousNode = nodePtr; nodePtr = nodePtr->next; } Continued on next slide…
  • 31. Starting Out with C++, 3rd Edition 31 // If the new mode is to be the 1st in the list, // insert it before all other nodes. if (previousNode == NULL) { head = newNode; newNode-> = nodePtr; } else { previousNode->next = newNode; newNode->next = nodePtr; } } } Continued from previous slide.
  • 32. Starting Out with C++, 3rd Edition 32 Program 17-3 // This program calls the displayList member function. // The function traverses the linked list displaying // the value stored in each node. #include <iostream.h> #include "FloatList.h” void main(void) { FloatList list; // Build the list list.appendNode(2.5); list.appendNode(7.9); list.appendNode(12.6); // Insert a node in the middle // of the list. list.insertNode(10.5); // Dispay the list list.displayList(); }
  • 33. Starting Out with C++, 3rd Edition 33 Program 17-3 Output 2.5 7.9 10.5 12.6
  • 34. Starting Out with C++, 3rd Edition 34 In insertNode, a new node is created and the function argument is copied to its value member. Since the list already has nodes stored in it, the else part of the if statement will execute. It begins by assigning nodePtr to head.
  • 35. Starting Out with C++, 3rd Edition 35 Since nodePtr is not NULL and nodePtr->value is less than num, the while loop will iterate. During the iteration, previousNode will be made to point to the node that nodePtr is pointing to. nodePtr will then be advanced to point to the next node.
  • 36. Starting Out with C++, 3rd Edition 36 Once again, the loop performs its test. Since nodePtr is not NULL and nodePtr->value is less than num, the loop will iterate a second time. During the second iteration, both previousNode and nodePtr are advanced by one node in the list.
  • 37. Starting Out with C++, 3rd Edition 37 This time, the loop's test will fail because nodePtr is not less than num. The statements after the loop will execute, which cause previousNode->next to point to newNode, and newNode->next to point to nodePtr. If you follow the links, from the head pointer to the NULL, you will see that the nodes are stored in the order of their value members.
  • 38. Starting Out with C++, 3rd Edition 38 Deleting a Node • Deleting a node from a linked list requires two steps: – Remove the node from the list without breaking the links created by the next pointers – Deleting the node from memory • The deleteNode function begins on the next slide.
  • 39. Starting Out with C++, 3rd Edition 39 void FloatList::deleteNode(float num) { ListNode *nodePtr, *previousNode; // If the list is empty, do nothing. if (!head) return; // Determine if the first node is the one. if (head->value == num) { nodePtr = head->next; delete head; head = nodePtr; } Continued on next slide…
  • 40. Starting Out with C++, 3rd Edition 40 else { // Initialize nodePtr to head of list nodePtr = head; // Skip all nodes whose value member is // not equal to num. while (nodePtr != NULL && nodePtr->value != num) { previousNode = nodePtr; nodePtr = nodePtr->next; } // Link the previous node to the node after // nodePtr, then delete nodePtr. previousNode->next = nodePtr->next; delete nodePtr; } } Continued from previous slide.
  • 41. Starting Out with C++, 3rd Edition 41 Program 17-4 // This program demonstrates the deleteNode member function #include <iostream.h> #include "FloatList.h“ void main(void) { FloatList list; // Build the list list.appendNode(2.5); list.appendNode(7.9); list.appendNode(12.6); cout << "Here are the initial values:n"; list.displayList(); cout << endl; cout << "Now deleting the node in the middle.n"; cout << "Here are the nodes left.n"; list.deleteNode(7.9); list.displayList(); cout << endl; Continued on next slide…
  • 42. Starting Out with C++, 3rd Edition 42 cout << "Now deleting the last node.n"; cout << "Here are the nodes left.n"; list.deleteNode(12.6); list.displayList(); cout << endl; cout << "Now deleting the only remaining node.n"; cout << "Here are the nodes left.n"; list.deleteNode(2.5); list.displayList(); } Continued from previous slide.
  • 43. Starting Out with C++, 3rd Edition 43 Program Output Here are the initial values: 2.5 7.9 12.6 Now deleting the node in the middle. Here are the nodes left. 2.5 12.6 Now deleting the last node. Here are the nodes left. 2.5 Now deleting the only remaining node. Here are the nodes left.
  • 44. Starting Out with C++, 3rd Edition 44 Look at the else part of the second if statement. This is where the function will perform its action since the list is not empty, and the first node does not contain the value 7.9. Just like insertNode, this function uses nodePtr and previousNode to traverse the list. The while loop terminates when the value 7.9 is located. At this point, the list and the other pointers will be in the state depicted in the figure below.
  • 45. Starting Out with C++, 3rd Edition 45 next, the following statement executes. previousNode->next = nodePtr->next; The statement above causes the links in the list to bypass the node that nodePtr points to. Although the node still exists in memory, this removes it from the list. The last statement uses the delete operator to complete the total deletion of the node.
  • 46. Starting Out with C++, 3rd Edition 46 Destroying the List • The class's destructor should release all the memory used by the list. • It does so by stepping through the list, deleting each node one-by-one. The code is shown on the next slide.
  • 47. Starting Out with C++, 3rd Edition 47 FloatList::~FloatList(void) { ListNode *nodePtr, *nextNode; nodePtr = head; while (nodePtr != NULL) { nextNode = nodePtr->next; delete nodePtr; nodePtr = nextNode; } } Notice the use of nextNode instead of previousNode. The nextNode pointer is used to hold the position of the next node in the list, so it will be available after the node pointed to by nodePtr is deleted.
  • 48. Starting Out with C++, 3rd Edition 48 17.3 A Linked List Template #ifndef LINKEDLIST_H #define LINKEDLIST_H template <class T> class LinkedList { private: // Declare a structure for the list struct ListNode { T value; struct ListNode *next; }; ListNode *head; // List head pointer Continued on next slide…
  • 49. Starting Out with C++, 3rd Edition 49 public: LinkedList(void) // Constructor { head = NULL; } ~LinkedList(void); // Destructor void appendNode(T); void insertNode(T); void deleteNode(T); void displayList(void); }; // appendNode appends a node containing the // value pased into num, to the end of the list. template <class T> void LinkedList<T>::AppendNode(T num) { ListNode *newNode, *nodePtr; // Allocate a new node & store num newNode = new ListNode; newNode->value = num; newNode->next = NULL; Continued on next slide…
  • 50. Starting Out with C++, 3rd Edition 50 // If there are no nodes in the list // make newNode the first node if (!head) head = newNode; else // Otherwise, insert newNode at end { // Initialize nodePtr to head of list nodePtr = head; // Find the last node in the list while (nodePtr->next) nodePtr = nodePtr->next; // Insert newNode as the last node nodePtr->next = newNode; } } Continued on next slide…
  • 51. Starting Out with C++, 3rd Edition 51 // DisplayList shows the value // stored in each node of the linked list // pointed to by head. template <class T> void LinkedList<T>::DisplayList(void) { ListNode *nodePtr; nodePtr = head; while (nodePtr) { cout << nodePtr->value << endl; nodePtr = nodePtr->next; } } Continued on next slide…
  • 52. Starting Out with C++, 3rd Edition 52 // The insertNode function inserts a node with // num copied to its value member. template <class T> void LinkedList<T>::insertNode(T num) { ListNode *newNode, *nodePtr, *previousNode; // Allocate a new node & store Num newNode = new ListNode; newNode->value = num; // If there are no nodes in the list // make newNode the first node if (!head) { head = newNode; newNode->next = NULL; } Continued on next slide…
  • 53. Starting Out with C++, 3rd Edition 53 else // Otherwise, insert newNode at end { // Initialize nodePtr to head of list nodePtr = head; // Skip all nodes whose value member is less // than num. while (nodePtr != NULL && nodePtr->value < num) { previousNode = nodePtr; nodePtr = nodePtr->next; } // Insert the node after the one pointed to // by previousNode and before the one pointed to // by nodePtr. previousNode->next = newNode; newNode->next = nodePtr; } } Continued on next slide…
  • 54. Starting Out with C++, 3rd Edition 54 // The deleteNode function searches for a node // with Num as its value. The node, if found, is // deleted from the list and from memory. template <class T> void LinkedList<T>::deleteNode(T num) { ListNode *nodePtr, *previousNode; // If the list is empty, do nothing. if (!head) return; // Determine if the first node is the one. if (head->value == num) { nodePtr = head->next; delete head; head = nodePtr; } Continued on next slide…
  • 55. Starting Out with C++, 3rd Edition 55 else { // Initialize nodePtr to head of list nodePtr = head; // Skip all nodes whose value member is // not equal to num. while (nodePtr != NULL && nodePtr->value != num) { previousNode = nodePtr; nodePtr = nodePtr->next; } // Link the previous node to the node after // nodePtr, then delete nodePtr. previousNode->next = nodePtr->next; delete nodePtr; } } Continued on next slide…
  • 56. Starting Out with C++, 3rd Edition 56 // Destructor // This function deletes every node in the list. template <class T> LinkedList<T>::~LinkedList(void) { ListNode *nodePtr, *nextNode; nodePtr = head; while (nodePtr != NULL) { nextNode = nodePtr->next; delete nodePtr; nodePtr = nextNode; } } #endif
  • 57. Starting Out with C++, 3rd Edition 57 Program 17-5 // This program demonstrates the linked list template. #include <iostream.h> #include "LinkedList.h“ void main(void) { LinkedList<int> list; // Build the list list.appendNode(2); list.appendNode(4); list.appendNode(6); cout << "Here are the initial values:n"; list.displayList(); cout << endl; Continued on next slide…
  • 58. Starting Out with C++, 3rd Edition 58 cout << "Now inserting the value 5.n"; list.insertNode(5); cout << "Here are the nodes now.n"; list.displayList(); cout << endl; cout << "Now deleting the last node.n"; list.deleteNode(6); cout << "Here are the nodes left.n"; list.displayList(); }
  • 59. Starting Out with C++, 3rd Edition 59 Program Output Here are the initial values: 2 4 6 Now inserting the value 5. Here are the nodes now. 2 4 5 6 Now deleting the last node. Here are the nodes left. 2 4 5
  • 60. Starting Out with C++, 3rd Edition 60 17.4 Variations of the Linked List The Doubly-Linked List
  • 61. Starting Out with C++, 3rd Edition 61 17.4 Variations of the Linked List The Circular Linked List
  • 62. Starting Out with C++, 3rd Edition 62 17.5 The STL list Container • The list container, found in the Standard Template Library, is a template version of a doubly linked list. • STL lists can insert elements, or add elements to their front quicker than vectors can, because lists do not have to shift the other elements. • lists are also efficient at adding elements at their back because they have a built-in pointer to the last element in the list (no traversal required).
  • 63. Starting Out with C++, 3rd Edition 63 Member Function Examples & Description back cout << list.back() << endl; The back member function returns a reference to the last element in the list. erase list.erase(iter); list.erase(firstIter, lastIter) The first example causes the list element pointed to by the iterator iter to be removed. The second example causes all of the list elements from firstIter to lastIter to be removed. empty if (list.empty()) The empty member function returns true if the list is empty. If the list has elements, it returns false.
  • 64. Starting Out with C++, 3rd Edition 64 Member Function Examples & Description end iter = list.end(); end returns a bi-directional iterator to the end of the list. front cout << list.front() << endl; front returns a reference to the first element of the list. insert list.insert(iter, x) The insert member function inserts an element into the list. The example shown above inserts an element with the value x, just before the element pointed to by iter. merge list1.merge(list2); merge inserts all the items in list2 into list1. list1 is expanded to accommodate the new elements plus any elements already stored in list1. merge expects both lists to be sorted. When list2 is inserted into list1, the elements are inserted into their correct position, so the resulting list is also sorted.
  • 65. Starting Out with C++, 3rd Edition 65 Member Function Examples & Description pop_back list.pop_back(); pop_back removes the last element of the list. pop_front list.pop_front(); pop_front removes the first element of the list. push_back list.push_back(x); push_back inserts an element with value x at the end of the list. push_front list.push_front(x); push_front inserts an element with value x at the beginning of the list. reverse list.reverse(); reverse reverses the order in which the elements appear in the list.
  • 66. Starting Out with C++, 3rd Edition 66 Member Function Examples & Description size() Returns the number of elements in the list. swap list1.swap(List2) The swap member function swaps the elements stored in two lists. For example, assuming list1 and list2 are lists, the statement shown above will exchange the values in the two. unique list.unique(); unique removes any element that has the same value as the element before it.
  • 67. Starting Out with C++, 3rd Edition 67 Program 17-6 // This program demonstrates the STL list container. #include <iostream.h> #include <list> // Include the list header using namespace std; // Required by some compilers void main(void) { list<int> myList; list<int>::iterator iter; // Add values to the list for (int x = 0; x < 100; x += 10) myList.push_back(x); // Display the values for (iter = myList.begin(); iter != myList.end(); iter++) cout << *iter << " "; cout << endl; Continued on next slide…
  • 68. Starting Out with C++, 3rd Edition 68 // Now reverse the order of the elements myList.reverse(); // Display the values again for (iter = myList.begin(); iter != myList.end(); iter++) cout << *iter << " "; cout << endl; } Program Output 0 10 20 30 40 50 60 70 80 90 90 80 70 60 50 40 30 20 10 0