SlideShare a Scribd company logo
Linked Lists
COMP171
Fall 2006
Linked Lists / Slide 2
List Overview
 Linked lists
 Abstract data type (ADT)
 Basic operations of linked lists
 Insert, find, delete, print, etc.
 Variations of linked lists
 Circular linked lists
 Doubly linked lists
Linked Lists / Slide 3
Linked Lists
 A linked list is a series of connected nodes
 Each node contains at least
 A piece of data (any type)
 Pointer to the next node in the list
 Head: pointer to the first node
 The last node points to NULL
A 
Head
B C
A
data pointer
node
Linked Lists / Slide 4
A Simple Linked List Class
 We use two classes: Node and List
 Declare Node class for the nodes
 data: double-type data in this example
 next: a pointer to the next node in the list
class Node {
public:
double data; // data
Node* next; // pointer to next
};
Linked Lists / Slide 5
A Simple Linked List Class
 Declare List, which contains
 head: a pointer to the first node in the list.
Since the list is empty initially, head is set to NULL
 Operations on List
class List {
public:
List(void) { head = NULL; } // constructor
~List(void); // destructor
bool IsEmpty() { return head == NULL; }
Node* InsertNode(int index, double x);
int FindNode(double x);
int DeleteNode(double x);
void DisplayList(void);
private:
Node* head;
};
Linked Lists / Slide 6
A Simple Linked List Class
 Operations of List
 IsEmpty: determine whether or not the list is
empty
 InsertNode: insert a new node at a particular
position
 FindNode: find a node with a given value
 DeleteNode: delete a node with a given value
 DisplayList: print all the nodes in the list
Linked Lists / Slide 7
Inserting a new node
 Node* InsertNode(int index, double x)
 Insert a node with data equal to x after the index’th elements.
(i.e., when index = 0, insert the node as the first element;
when index = 1, insert the node after the first element, and so on)
 If the insertion is successful, return the inserted node.
Otherwise, return NULL.
(If index is < 0 or > length of the list, the insertion will fail.)
 Steps
1. Locate index’th element
2. Allocate memory for the new node
3. Point the new node to its successor
4. Point the new node’s predecessor to the new node
newNode
index’th
element
Linked Lists / Slide 8
Inserting a new node
 Possible cases of InsertNode
1. Insert into an empty list
2. Insert in front
3. Insert at back
4. Insert in middle
 But, in fact, only need to handle two cases
 Insert as the first node (Case 1 and Case 2)
 Insert in the middle or at the end of the list (Case 3 and
Case 4)
Linked Lists / Slide 9
Inserting a new node
Node* List::InsertNode(int index, double x) {
if (index < 0) return NULL;
int currIndex = 1;
Node* currNode = head;
while (currNode && index > currIndex) {
currNode = currNode->next;
currIndex++;
}
if (index > 0 && currNode == NULL) return NULL;
Node* newNode = new Node;
newNode->data = x;
if (index == 0) {
newNode->next = head;
head = newNode;
}
else {
newNode->next = currNode->next;
currNode->next = newNode;
}
return newNode;
}
Try to locate
index’th node. If it
doesn’t exist,
return NULL.
Linked Lists / Slide 10
Inserting a new node
Node* List::InsertNode(int index, double x) {
if (index < 0) return NULL;
int currIndex = 1;
Node* currNode = head;
while (currNode && index > currIndex) {
currNode = currNode->next;
currIndex++;
}
if (index > 0 && currNode == NULL) return NULL;
Node* newNode = new Node;
newNode->data = x;
if (index == 0) {
newNode->next = head;
head = newNode;
}
else {
newNode->next = currNode->next;
currNode->next = newNode;
}
return newNode;
}
Create a new node
Linked Lists / Slide 11
Inserting a new node
Node* List::InsertNode(int index, double x) {
if (index < 0) return NULL;
int currIndex = 1;
Node* currNode = head;
while (currNode && index > currIndex) {
currNode = currNode->next;
currIndex++;
}
if (index > 0 && currNode == NULL) return NULL;
Node* newNode = new Node;
newNode->data = x;
if (index == 0) {
newNode->next = head;
head = newNode;
}
else {
newNode->next = currNode->next;
currNode->next = newNode;
}
return newNode;
}
Insert as first element
head
newNode
Linked Lists / Slide 12
Inserting a new node
Node* List::InsertNode(int index, double x) {
if (index < 0) return NULL;
int currIndex = 1;
Node* currNode = head;
while (currNode && index > currIndex) {
currNode = currNode->next;
currIndex++;
}
if (index > 0 && currNode == NULL) return NULL;
Node* newNode = new Node;
newNode->data = x;
if (index == 0) {
newNode->next = head;
head = newNode;
}
else {
newNode->next = currNode->next;
currNode->next = newNode;
}
return newNode;
}
Insert after currNode
newNode
currNode
Linked Lists / Slide 13
Finding a node
 int FindNode(double x)
 Search for a node with the value equal to x in the list.
 If such a node is found, return its position. Otherwise, return
0.
int List::FindNode(double x) {
Node* currNode = head;
int currIndex = 1;
while (currNode && currNode->data != x) {
currNode = currNode->next;
currIndex++;
}
if (currNode) return currIndex;
return 0;
}
Linked Lists / Slide 14
Deleting a node
 int DeleteNode(double x)
 Delete a node with the value equal to x from the list.
 If such a node is found, return its position. Otherwise, return
0.
 Steps
 Find the desirable node (similar to FindNode)
 Release the memory occupied by the found node
 Set the pointer of the predecessor of the found node to the
successor of the found node
 Like InsertNode, there are two special cases
 Delete first node
 Delete the node in middle or at the end of the list
Linked Lists / Slide 15
Deleting a node
int List::DeleteNode(double x) {
Node* prevNode = NULL;
Node* currNode = head;
int currIndex = 1;
while (currNode && currNode->data != x) {
prevNode = currNode;
currNode = currNode->next;
currIndex++;
}
if (currNode) {
if (prevNode) {
prevNode->next = currNode->next;
delete currNode;
}
else {
head = currNode->next;
delete currNode;
}
return currIndex;
}
return 0;
}
Try to find the node with
its value equal to x
Linked Lists / Slide 16
Deleting a node
int List::DeleteNode(double x) {
Node* prevNode = NULL;
Node* currNode = head;
int currIndex = 1;
while (currNode && currNode->data != x) {
prevNode = currNode;
currNode = currNode->next;
currIndex++;
}
if (currNode) {
if (prevNode) {
prevNode->next = currNode->next;
delete currNode;
}
else {
head = currNode->next;
delete currNode;
}
return currIndex;
}
return 0;
}
currNode
prevNode
Linked Lists / Slide 17
Deleting a node
int List::DeleteNode(double x) {
Node* prevNode = NULL;
Node* currNode = head;
int currIndex = 1;
while (currNode && currNode->data != x) {
prevNode = currNode;
currNode = currNode->next;
currIndex++;
}
if (currNode) {
if (prevNode) {
prevNode->next = currNode->next;
delete currNode;
}
else {
head = currNode->next;
delete currNode;
}
return currIndex;
}
return 0;
}
currNode
head
Linked Lists / Slide 18
Printing all the elements
 void DisplayList(void)
 Print the data of all the elements
 Print the number of the nodes in the list
void List::DisplayList()
{
int num = 0;
Node* currNode = head;
while (currNode != NULL){
cout << currNode->data << endl;
currNode = currNode->next;
num++;
}
cout << "Number of nodes in the list: " << num << endl;
}
Linked Lists / Slide 19
Destroying the list
 ~List(void)
 Use the destructor to release all the memory used by the list.
 Step through the list and delete each node one by one.
List::~List(void) {
Node* currNode = head, *nextNode = NULL;
while (currNode != NULL)
{
nextNode = currNode->next;
// destroy the current node
delete currNode;
currNode = nextNode;
}
}
Linked Lists / Slide 20
Using List
int main(void)
{
List list;
list.InsertNode(0, 7.0); // successful
list.InsertNode(1, 5.0); // successful
list.InsertNode(-1, 5.0); // unsuccessful
list.InsertNode(0, 6.0); // successful
list.InsertNode(8, 4.0); // unsuccessful
// print all the elements
list.DisplayList();
if(list.FindNode(5.0) > 0) cout << "5.0 found" << endl;
else cout << "5.0 not found" << endl;
if(list.FindNode(4.5) > 0) cout << "4.5 found" << endl;
else cout << "4.5 not found" << endl;
list.DeleteNode(7.0);
list.DisplayList();
return 0;
}
6
7
5
Number of nodes in the list: 3
5.0 found
4.5 not found
6
5
Number of nodes in the list: 2
result
Linked Lists / Slide 21
Variations of Linked Lists
 Circular linked lists
 The last node points to the first node of the list
 How do we know when we have finished traversing
the list? (Tip: check if the pointer of the current
node is equal to the head.)
A
Head
B C
Linked Lists / Slide 22
Variations of Linked Lists
 Doubly linked lists
 Each node points to not only successor but the
predecessor
 There are two NULL: at the first and last nodes in the
list
 Advantage: given a node, it is easy to visit its
predecessor. Convenient to traverse lists backwards
A
Head
B
 C 
Linked Lists / Slide 23
Array versus Linked Lists
 Linked lists are more complex to code and manage
than arrays, but they have some distinct advantages.
 Dynamic: a linked list can easily grow and shrink in size.
 We don’t need to know how many nodes will be in the list. They
are created in memory as needed.
 In contrast, the size of a C++ array is fixed at compilation time.
 Easy and fast insertions and deletions
 To insert or delete an element in an array, we need to copy to
temporary variables to make room for new elements or close the
gap caused by deleted elements.
 With a linked list, no need to move other nodes. Only need to
reset some pointers.
Ad

Recommended

PPT
Abstract data types
JAGDEEPKUMAR23
 
PPT
List
Amit Vats
 
PPT
linked-list - Finding a node Deleting a node
Anil Yadav
 
PPT
Array linked list.ppt
Waf1231
 
PPT
linked-list.ppt
DikkySuryadiSKomMKom
 
PPT
17 linkedlist (1)
Himadri Sen Gupta
 
PPT
Linkedlist
Masud Parvaze
 
PPTX
Lecture 4 data structures and algorithms
Aakash deep Singhal
 
PPTX
3.linked list
Chandan Singh
 
PPT
Algo>ADT list & linked list
Ain-ul-Moiz Khawaja
 
PPTX
Linked lists a
Khuram Shahzad
 
PPTX
Linked list
Arbind Mandal
 
PDF
Lec-4_Linked-List (1).pdf
KylaMaeGarcia1
 
PDF
LinkedList1LinkedList1LinkedList1111.pdf
timoemin50
 
PPT
Linked list1.ppt
KasthuriKAssistantPr
 
PPT
Fundamentals of data structures
Niraj Agarwal
 
PPTX
C Exam Help
Programming Exam Help
 
PDF
Data Structures in C++I am really new to C++, so links are really .pdf
rohit219406
 
PPTX
Linked list
KalaivaniKS1
 
PPTX
C Homework Help
Programming Homework Help
 
PPT
Mi 103 linked list
Amit Vats
 
PPTX
linkedlistforslideshare-210123143943.pptx
shesnasuneer
 
PPTX
UNIT 2LINKEDLISdddddddddddddddddddddddddddT.pptx
shesnasuneer
 
PDF
Unit - 2.pdf
AravindAnand21
 
PDF
C++ Doubly-Linked ListsThe goal of the exercise is to implement a.pdf
poblettesedanoree498
 
PPTX
DS_LinkedList.pptx
msohail37
 
PPTX
linkedlist-130914084342-phpapp02.pptx
MeghaKulkarni27
 
PPTX
Link List : Introduction to List and Linked Lists
Anil Yadav
 
PPTX
Link List REPRESENTATION OF DOUBLY LINKED LIST
Anil Yadav
 

More Related Content

Similar to linked-list - Abstract data type (ADT) Linked Lists (20)

PPTX
3.linked list
Chandan Singh
 
PPT
Algo>ADT list & linked list
Ain-ul-Moiz Khawaja
 
PPTX
Linked lists a
Khuram Shahzad
 
PPTX
Linked list
Arbind Mandal
 
PDF
Lec-4_Linked-List (1).pdf
KylaMaeGarcia1
 
PDF
LinkedList1LinkedList1LinkedList1111.pdf
timoemin50
 
PPT
Linked list1.ppt
KasthuriKAssistantPr
 
PPT
Fundamentals of data structures
Niraj Agarwal
 
PPTX
C Exam Help
Programming Exam Help
 
PDF
Data Structures in C++I am really new to C++, so links are really .pdf
rohit219406
 
PPTX
Linked list
KalaivaniKS1
 
PPTX
C Homework Help
Programming Homework Help
 
PPT
Mi 103 linked list
Amit Vats
 
PPTX
linkedlistforslideshare-210123143943.pptx
shesnasuneer
 
PPTX
UNIT 2LINKEDLISdddddddddddddddddddddddddddT.pptx
shesnasuneer
 
PDF
Unit - 2.pdf
AravindAnand21
 
PDF
C++ Doubly-Linked ListsThe goal of the exercise is to implement a.pdf
poblettesedanoree498
 
PPTX
DS_LinkedList.pptx
msohail37
 
PPTX
linkedlist-130914084342-phpapp02.pptx
MeghaKulkarni27
 
3.linked list
Chandan Singh
 
Algo>ADT list & linked list
Ain-ul-Moiz Khawaja
 
Linked lists a
Khuram Shahzad
 
Linked list
Arbind Mandal
 
Lec-4_Linked-List (1).pdf
KylaMaeGarcia1
 
LinkedList1LinkedList1LinkedList1111.pdf
timoemin50
 
Linked list1.ppt
KasthuriKAssistantPr
 
Fundamentals of data structures
Niraj Agarwal
 
C Exam Help
Programming Exam Help
 
Data Structures in C++I am really new to C++, so links are really .pdf
rohit219406
 
Linked list
KalaivaniKS1
 
C Homework Help
Programming Homework Help
 
Mi 103 linked list
Amit Vats
 
linkedlistforslideshare-210123143943.pptx
shesnasuneer
 
UNIT 2LINKEDLISdddddddddddddddddddddddddddT.pptx
shesnasuneer
 
Unit - 2.pdf
AravindAnand21
 
C++ Doubly-Linked ListsThe goal of the exercise is to implement a.pdf
poblettesedanoree498
 
DS_LinkedList.pptx
msohail37
 
linkedlist-130914084342-phpapp02.pptx
MeghaKulkarni27
 

More from Anil Yadav (20)

PPTX
Link List : Introduction to List and Linked Lists
Anil Yadav
 
PPTX
Link List REPRESENTATION OF DOUBLY LINKED LIST
Anil Yadav
 
PPTX
ALGORITHM FOR PUSHING AN ELEMENT TO A QUEUE
Anil Yadav
 
PPTX
Link List STACK and Queue USING LINKED LIST
Anil Yadav
 
PPTX
Link List Programming Linked List in Cpp
Anil Yadav
 
PPTX
Link List & ALGORITHM FOR DELETING A NODE
Anil Yadav
 
PPTX
Link List ALGORITHM FOR INSERTING A NODE
Anil Yadav
 
PPTX
Presentations Linked Lists Data Structure
Anil Yadav
 
PPT
Lec-12, 13 Quees First In First Out (FIFO)
Anil Yadav
 
PPT
Lec-12, 13 Quee s Applications of Queues
Anil Yadav
 
PPT
Lec-12, 13 Quees Array Implementation IN
Anil Yadav
 
PPT
Lec-12, 13 Quees In Queue IntQueue(int s)
Anil Yadav
 
PPT
Lec-12, 13 Quees A class for Dynamic Queue implementation
Anil Yadav
 
PPT
Function enqueue inserts the value in num
Anil Yadav
 
PPT
Lec-12, 13 Quees -How to determine empty and full Queues?
Anil Yadav
 
PDF
Unit2-BIS Business Information system Data
Anil Yadav
 
PPT
Lec-12, 13 Queues - IntQueue IntQueue(int s) //constructor
Anil Yadav
 
PPT
Lec-12, 13 Quees Another implementation of Queues using Arrays
Anil Yadav
 
PPT
Lec-12, 13 Quees - Circular Queues and Implementation with Array
Anil Yadav
 
PPT
Lec-32 Recursion - Divide and Conquer in Queue
Anil Yadav
 
Link List : Introduction to List and Linked Lists
Anil Yadav
 
Link List REPRESENTATION OF DOUBLY LINKED LIST
Anil Yadav
 
ALGORITHM FOR PUSHING AN ELEMENT TO A QUEUE
Anil Yadav
 
Link List STACK and Queue USING LINKED LIST
Anil Yadav
 
Link List Programming Linked List in Cpp
Anil Yadav
 
Link List & ALGORITHM FOR DELETING A NODE
Anil Yadav
 
Link List ALGORITHM FOR INSERTING A NODE
Anil Yadav
 
Presentations Linked Lists Data Structure
Anil Yadav
 
Lec-12, 13 Quees First In First Out (FIFO)
Anil Yadav
 
Lec-12, 13 Quee s Applications of Queues
Anil Yadav
 
Lec-12, 13 Quees Array Implementation IN
Anil Yadav
 
Lec-12, 13 Quees In Queue IntQueue(int s)
Anil Yadav
 
Lec-12, 13 Quees A class for Dynamic Queue implementation
Anil Yadav
 
Function enqueue inserts the value in num
Anil Yadav
 
Lec-12, 13 Quees -How to determine empty and full Queues?
Anil Yadav
 
Unit2-BIS Business Information system Data
Anil Yadav
 
Lec-12, 13 Queues - IntQueue IntQueue(int s) //constructor
Anil Yadav
 
Lec-12, 13 Quees Another implementation of Queues using Arrays
Anil Yadav
 
Lec-12, 13 Quees - Circular Queues and Implementation with Array
Anil Yadav
 
Lec-32 Recursion - Divide and Conquer in Queue
Anil Yadav
 
Ad

Recently uploaded (20)

PPTX
Urban Hierarchy and Service Provisions.pptx
Islamic University of Bangladesh
 
PPTX
F-BLOCK ELEMENTS POWER POINT PRESENTATIONS
mprpgcwa2024
 
PDF
THE PSYCHOANALYTIC OF THE BLACK CAT BY EDGAR ALLAN POE (1).pdf
nabilahk908
 
PPTX
2025 Completing the Pre-SET Plan Form.pptx
mansk2
 
PPTX
Iván Bornacelly - Presentation of the report - Empowering the workforce in th...
EduSkills OECD
 
PPTX
How to Configure Refusal of Applicants in Odoo 18 Recruitment
Celine George
 
PPTX
How to Add New Item in CogMenu in Odoo 18
Celine George
 
PPTX
Project 4 PART 1 AI Assistant Vocational Education
barmanjit380
 
PDF
The Power of Compound Interest (Stanford Initiative for Financial Decision-Ma...
Stanford IFDM
 
PPTX
A Case of Identity A Sociological Approach Fix.pptx
Ismail868386
 
PPTX
How to Manage Wins & Losses in Odoo 18 CRM
Celine George
 
PPTX
How to Configure Taxes in Company Currency in Odoo 18 Accounting
Celine George
 
PPTX
Comparing Translational and Rotational Motion.pptx
AngeliqueTolentinoDe
 
PPTX
Aerobic and Anaerobic respiration and CPR.pptx
Olivier Rochester
 
PPTX
ENGLISH -PPT- Week1 Quarter1 -day-1.pptx
garcialhavz
 
PPTX
How to use grouped() method in Odoo 18 - Odoo Slides
Celine George
 
PDF
Learning Styles Inventory for Senior High School Students
Thelma Villaflores
 
PPT
M&A5 Q1 1 differentiate evolving early Philippine conventional and contempora...
ErlizaRosete
 
PDF
Public Health For The 21st Century 1st Edition Judy Orme Jane Powell
trjnesjnqg7801
 
PPT
M&A5 Q1 1 differentiate evolving early Philippine conventional and contempora...
ErlizaRosete
 
Urban Hierarchy and Service Provisions.pptx
Islamic University of Bangladesh
 
F-BLOCK ELEMENTS POWER POINT PRESENTATIONS
mprpgcwa2024
 
THE PSYCHOANALYTIC OF THE BLACK CAT BY EDGAR ALLAN POE (1).pdf
nabilahk908
 
2025 Completing the Pre-SET Plan Form.pptx
mansk2
 
Iván Bornacelly - Presentation of the report - Empowering the workforce in th...
EduSkills OECD
 
How to Configure Refusal of Applicants in Odoo 18 Recruitment
Celine George
 
How to Add New Item in CogMenu in Odoo 18
Celine George
 
Project 4 PART 1 AI Assistant Vocational Education
barmanjit380
 
The Power of Compound Interest (Stanford Initiative for Financial Decision-Ma...
Stanford IFDM
 
A Case of Identity A Sociological Approach Fix.pptx
Ismail868386
 
How to Manage Wins & Losses in Odoo 18 CRM
Celine George
 
How to Configure Taxes in Company Currency in Odoo 18 Accounting
Celine George
 
Comparing Translational and Rotational Motion.pptx
AngeliqueTolentinoDe
 
Aerobic and Anaerobic respiration and CPR.pptx
Olivier Rochester
 
ENGLISH -PPT- Week1 Quarter1 -day-1.pptx
garcialhavz
 
How to use grouped() method in Odoo 18 - Odoo Slides
Celine George
 
Learning Styles Inventory for Senior High School Students
Thelma Villaflores
 
M&A5 Q1 1 differentiate evolving early Philippine conventional and contempora...
ErlizaRosete
 
Public Health For The 21st Century 1st Edition Judy Orme Jane Powell
trjnesjnqg7801
 
M&A5 Q1 1 differentiate evolving early Philippine conventional and contempora...
ErlizaRosete
 
Ad

linked-list - Abstract data type (ADT) Linked Lists

  • 2. Linked Lists / Slide 2 List Overview  Linked lists  Abstract data type (ADT)  Basic operations of linked lists  Insert, find, delete, print, etc.  Variations of linked lists  Circular linked lists  Doubly linked lists
  • 3. Linked Lists / Slide 3 Linked Lists  A linked list is a series of connected nodes  Each node contains at least  A piece of data (any type)  Pointer to the next node in the list  Head: pointer to the first node  The last node points to NULL A  Head B C A data pointer node
  • 4. Linked Lists / Slide 4 A Simple Linked List Class  We use two classes: Node and List  Declare Node class for the nodes  data: double-type data in this example  next: a pointer to the next node in the list class Node { public: double data; // data Node* next; // pointer to next };
  • 5. Linked Lists / Slide 5 A Simple Linked List Class  Declare List, which contains  head: a pointer to the first node in the list. Since the list is empty initially, head is set to NULL  Operations on List class List { public: List(void) { head = NULL; } // constructor ~List(void); // destructor bool IsEmpty() { return head == NULL; } Node* InsertNode(int index, double x); int FindNode(double x); int DeleteNode(double x); void DisplayList(void); private: Node* head; };
  • 6. Linked Lists / Slide 6 A Simple Linked List Class  Operations of List  IsEmpty: determine whether or not the list is empty  InsertNode: insert a new node at a particular position  FindNode: find a node with a given value  DeleteNode: delete a node with a given value  DisplayList: print all the nodes in the list
  • 7. Linked Lists / Slide 7 Inserting a new node  Node* InsertNode(int index, double x)  Insert a node with data equal to x after the index’th elements. (i.e., when index = 0, insert the node as the first element; when index = 1, insert the node after the first element, and so on)  If the insertion is successful, return the inserted node. Otherwise, return NULL. (If index is < 0 or > length of the list, the insertion will fail.)  Steps 1. Locate index’th element 2. Allocate memory for the new node 3. Point the new node to its successor 4. Point the new node’s predecessor to the new node newNode index’th element
  • 8. Linked Lists / Slide 8 Inserting a new node  Possible cases of InsertNode 1. Insert into an empty list 2. Insert in front 3. Insert at back 4. Insert in middle  But, in fact, only need to handle two cases  Insert as the first node (Case 1 and Case 2)  Insert in the middle or at the end of the list (Case 3 and Case 4)
  • 9. Linked Lists / Slide 9 Inserting a new node Node* List::InsertNode(int index, double x) { if (index < 0) return NULL; int currIndex = 1; Node* currNode = head; while (currNode && index > currIndex) { currNode = currNode->next; currIndex++; } if (index > 0 && currNode == NULL) return NULL; Node* newNode = new Node; newNode->data = x; if (index == 0) { newNode->next = head; head = newNode; } else { newNode->next = currNode->next; currNode->next = newNode; } return newNode; } Try to locate index’th node. If it doesn’t exist, return NULL.
  • 10. Linked Lists / Slide 10 Inserting a new node Node* List::InsertNode(int index, double x) { if (index < 0) return NULL; int currIndex = 1; Node* currNode = head; while (currNode && index > currIndex) { currNode = currNode->next; currIndex++; } if (index > 0 && currNode == NULL) return NULL; Node* newNode = new Node; newNode->data = x; if (index == 0) { newNode->next = head; head = newNode; } else { newNode->next = currNode->next; currNode->next = newNode; } return newNode; } Create a new node
  • 11. Linked Lists / Slide 11 Inserting a new node Node* List::InsertNode(int index, double x) { if (index < 0) return NULL; int currIndex = 1; Node* currNode = head; while (currNode && index > currIndex) { currNode = currNode->next; currIndex++; } if (index > 0 && currNode == NULL) return NULL; Node* newNode = new Node; newNode->data = x; if (index == 0) { newNode->next = head; head = newNode; } else { newNode->next = currNode->next; currNode->next = newNode; } return newNode; } Insert as first element head newNode
  • 12. Linked Lists / Slide 12 Inserting a new node Node* List::InsertNode(int index, double x) { if (index < 0) return NULL; int currIndex = 1; Node* currNode = head; while (currNode && index > currIndex) { currNode = currNode->next; currIndex++; } if (index > 0 && currNode == NULL) return NULL; Node* newNode = new Node; newNode->data = x; if (index == 0) { newNode->next = head; head = newNode; } else { newNode->next = currNode->next; currNode->next = newNode; } return newNode; } Insert after currNode newNode currNode
  • 13. Linked Lists / Slide 13 Finding a node  int FindNode(double x)  Search for a node with the value equal to x in the list.  If such a node is found, return its position. Otherwise, return 0. int List::FindNode(double x) { Node* currNode = head; int currIndex = 1; while (currNode && currNode->data != x) { currNode = currNode->next; currIndex++; } if (currNode) return currIndex; return 0; }
  • 14. Linked Lists / Slide 14 Deleting a node  int DeleteNode(double x)  Delete a node with the value equal to x from the list.  If such a node is found, return its position. Otherwise, return 0.  Steps  Find the desirable node (similar to FindNode)  Release the memory occupied by the found node  Set the pointer of the predecessor of the found node to the successor of the found node  Like InsertNode, there are two special cases  Delete first node  Delete the node in middle or at the end of the list
  • 15. Linked Lists / Slide 15 Deleting a node int List::DeleteNode(double x) { Node* prevNode = NULL; Node* currNode = head; int currIndex = 1; while (currNode && currNode->data != x) { prevNode = currNode; currNode = currNode->next; currIndex++; } if (currNode) { if (prevNode) { prevNode->next = currNode->next; delete currNode; } else { head = currNode->next; delete currNode; } return currIndex; } return 0; } Try to find the node with its value equal to x
  • 16. Linked Lists / Slide 16 Deleting a node int List::DeleteNode(double x) { Node* prevNode = NULL; Node* currNode = head; int currIndex = 1; while (currNode && currNode->data != x) { prevNode = currNode; currNode = currNode->next; currIndex++; } if (currNode) { if (prevNode) { prevNode->next = currNode->next; delete currNode; } else { head = currNode->next; delete currNode; } return currIndex; } return 0; } currNode prevNode
  • 17. Linked Lists / Slide 17 Deleting a node int List::DeleteNode(double x) { Node* prevNode = NULL; Node* currNode = head; int currIndex = 1; while (currNode && currNode->data != x) { prevNode = currNode; currNode = currNode->next; currIndex++; } if (currNode) { if (prevNode) { prevNode->next = currNode->next; delete currNode; } else { head = currNode->next; delete currNode; } return currIndex; } return 0; } currNode head
  • 18. Linked Lists / Slide 18 Printing all the elements  void DisplayList(void)  Print the data of all the elements  Print the number of the nodes in the list void List::DisplayList() { int num = 0; Node* currNode = head; while (currNode != NULL){ cout << currNode->data << endl; currNode = currNode->next; num++; } cout << "Number of nodes in the list: " << num << endl; }
  • 19. Linked Lists / Slide 19 Destroying the list  ~List(void)  Use the destructor to release all the memory used by the list.  Step through the list and delete each node one by one. List::~List(void) { Node* currNode = head, *nextNode = NULL; while (currNode != NULL) { nextNode = currNode->next; // destroy the current node delete currNode; currNode = nextNode; } }
  • 20. Linked Lists / Slide 20 Using List int main(void) { List list; list.InsertNode(0, 7.0); // successful list.InsertNode(1, 5.0); // successful list.InsertNode(-1, 5.0); // unsuccessful list.InsertNode(0, 6.0); // successful list.InsertNode(8, 4.0); // unsuccessful // print all the elements list.DisplayList(); if(list.FindNode(5.0) > 0) cout << "5.0 found" << endl; else cout << "5.0 not found" << endl; if(list.FindNode(4.5) > 0) cout << "4.5 found" << endl; else cout << "4.5 not found" << endl; list.DeleteNode(7.0); list.DisplayList(); return 0; } 6 7 5 Number of nodes in the list: 3 5.0 found 4.5 not found 6 5 Number of nodes in the list: 2 result
  • 21. Linked Lists / Slide 21 Variations of Linked Lists  Circular linked lists  The last node points to the first node of the list  How do we know when we have finished traversing the list? (Tip: check if the pointer of the current node is equal to the head.) A Head B C
  • 22. Linked Lists / Slide 22 Variations of Linked Lists  Doubly linked lists  Each node points to not only successor but the predecessor  There are two NULL: at the first and last nodes in the list  Advantage: given a node, it is easy to visit its predecessor. Convenient to traverse lists backwards A Head B  C 
  • 23. Linked Lists / Slide 23 Array versus Linked Lists  Linked lists are more complex to code and manage than arrays, but they have some distinct advantages.  Dynamic: a linked list can easily grow and shrink in size.  We don’t need to know how many nodes will be in the list. They are created in memory as needed.  In contrast, the size of a C++ array is fixed at compilation time.  Easy and fast insertions and deletions  To insert or delete an element in an array, we need to copy to temporary variables to make room for new elements or close the gap caused by deleted elements.  With a linked list, no need to move other nodes. Only need to reset some pointers.