2. Linked Lists.data.structure.algorithm.pdf

airaaheer 0 views 170 slides Nov 01, 2025
Slide 1
Slide 1 of 170
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66
Slide 67
67
Slide 68
68
Slide 69
69
Slide 70
70
Slide 71
71
Slide 72
72
Slide 73
73
Slide 74
74
Slide 75
75
Slide 76
76
Slide 77
77
Slide 78
78
Slide 79
79
Slide 80
80
Slide 81
81
Slide 82
82
Slide 83
83
Slide 84
84
Slide 85
85
Slide 86
86
Slide 87
87
Slide 88
88
Slide 89
89
Slide 90
90
Slide 91
91
Slide 92
92
Slide 93
93
Slide 94
94
Slide 95
95
Slide 96
96
Slide 97
97
Slide 98
98
Slide 99
99
Slide 100
100
Slide 101
101
Slide 102
102
Slide 103
103
Slide 104
104
Slide 105
105
Slide 106
106
Slide 107
107
Slide 108
108
Slide 109
109
Slide 110
110
Slide 111
111
Slide 112
112
Slide 113
113
Slide 114
114
Slide 115
115
Slide 116
116
Slide 117
117
Slide 118
118
Slide 119
119
Slide 120
120
Slide 121
121
Slide 122
122
Slide 123
123
Slide 124
124
Slide 125
125
Slide 126
126
Slide 127
127
Slide 128
128
Slide 129
129
Slide 130
130
Slide 131
131
Slide 132
132
Slide 133
133
Slide 134
134
Slide 135
135
Slide 136
136
Slide 137
137
Slide 138
138
Slide 139
139
Slide 140
140
Slide 141
141
Slide 142
142
Slide 143
143
Slide 144
144
Slide 145
145
Slide 146
146
Slide 147
147
Slide 148
148
Slide 149
149
Slide 150
150
Slide 151
151
Slide 152
152
Slide 153
153
Slide 154
154
Slide 155
155
Slide 156
156
Slide 157
157
Slide 158
158
Slide 159
159
Slide 160
160
Slide 161
161
Slide 162
162
Slide 163
163
Slide 164
164
Slide 165
165
Slide 166
166
Slide 167
167
Slide 168
168
Slide 169
169
Slide 170
170

About This Presentation

linked list


Slide Content

Linked Lists
1
DATA STRUCTURES
AND ALGORITHMS

LIST ADT
•What we mean by a "list".
•It is a collection of some elements.
•The most important concept related to lists is that
ofposition. In other words, we perceive that there is a first
element in the list, a second element, and so on.
•So, we consider alistto be a finite, ordered sequence of data
items known aselements.
•This is close to the mathematical concept of asequence.
2

LIST ADT
•"Ordered"inthisdefinitionmeansthateachelementhasa
positioninthelist.
•Sotheterm"ordered"inthiscontextdoesnotmeanthatthelist
elementsaresortedbyvalue.
•Eachlistelementmusthavesomedatatype.
•Althoughthereisnoconceptualobjectiontolistswhoseelements
havedifferingdatatypesiftheapplicationrequiresit.
3

LIST ADT
•A list is said to beemptywhen it contains no
elements.
•The number of elements currently stored is called
thelengthof the list.
•The beginning of the list is called thehead, the end
of the list is called thetail.
4

Basic Operations on LIST ADT
•A list should be able to grow and shrink in size as we insert and
remove elements.
•We should be able to insert and remove elements from anywhere
in the list.
•We should be able to gain access to any element's value, either to
read it or to change it.
•We must be able to create and clear (or reinitialize) lists.
•It is also convenient to access the next or previous element from
the "current" one.
5

Implementations of LIST ADT
•There are two standard approaches to implementing lists:
•thearray-based list,
•and thelinked list.
•We have already learnt about arrays in detail.
•Now, we will discuss about:
•What linked-list is?
•What are its types?
6

Need for Linked List
•Sometimes you need to store a list of elements in memory.
•Suppose you’re writing an app to manage your to-do's.
•You’ll want to store the to-do's as a list in memory.
•Let’s store the to-do's in an array.
7
■Using an array means all your tasks
are stored contiguously (right next
to each other) in memory.

Need for Linked List
•Now suppose you want to add a fourth task.
•But the next location is taken up by someone else’s stuff!
•You have to move to a new spot where you all fit.
8
■In this case, you need to ask your
computer for a different chunk of memory
that can fit four tasks.
■Then you need to move all your tasks
there.

Need for Linked List
•Similarly, adding new items to an array can be a big pain.
•If you’re out of space and need to move to a new spot in memory
every time, adding a new item will be really slow.
9
■One easy fix is to “hold seats”: even if you
have only 3 items in your task list, you can
ask the computer for 10 slots.
■Then you can add 10 items to your task list
without having to move.

Need for Linked List
•This is a good workaround, but you should be aware of a couple of
downsides:
10
You may not need the extra slots that you
asked for, and then that memory will be
wasted. You aren’t using it, but no one else
can use it either.
You may add more than 10 items to your
task list and have to move anyway.

Need for Linked List
•Linked lists solve this problem.
•With linked lists, your items can be anywhere in memory.
•Each item stores the address of the next item in the list.
11
■A bunch of random memory addresses are
linked together.

Need for Linked List
•Linked lists solve this problem.
•With linked lists, your items can be anywhere in memory.
•Each item stores the address of the next item in the list.
12
■A bunch of random memory addresses are
linked together.

Need for Linked List
•You go to the first address, and it says, “The next item can be found at
address 123.”
•So you go to address 123, and it says, “The next item can be found at
address 847,” and so on.
13
■With linked lists, you never have to move
your items.

Linked List
•A linked list is a sequence of data structures, which are connected
together via links.
•Each link contains a connection to another link.
14
■So, it is not just the “actual” value that is
stored; we also store the address of the
next location.
■Lets call this location as “node” which
contains two parts:
–The actual “data”
–The “pointer” to the next node.
5
datapointer
node

15
A Simple Linked List Class
•We use two classes: Nodeand 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:
int data; // data
Node* next; // pointer to next
};

Linked List
•It can be visualized as a chain of nodes, where every node points to the
next node.
•There are actual three nodes here; “head” is the pointer that points to
the first node.
•The last node points to “nowhere” or NULL, indicating the end of list.
16

17
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, headis 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, int x);
int FindNode(int x);
int DeleteNode(int x);
void DisplayList(void);
private:
Node* head;
};

Operations on Linked List
1.Searching/Traversing
2.Updation
3.Inserting
1.In empty list
2.In front of list
3.In the middle of list
4.At the end
4.Deleting
1.First Node
2.Middle node
3.Last node
18

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.

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

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

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

Insert a Value
232323
19 0 4 12 15 NULL
Head
CurrentNode
5
Algorithm InsertNode(Position, Value)

Insert a Value
24
5
19
0
4
12
NULL
HeadPosition = 0
Value = 10
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 a Value
25
5
19
0
4
12
NULL
HeadPosition = 0
Value = 10
return NULL
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 a Value
26
5
19
0
4
12
NULL
HeadPosition = 1
Value = 10
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 a Value
27
5
19
0
4
12
NULL
HeadPosition = 1
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If

Insert a Value
28
5
19
0
4
12
NULL
HeadPosition = 1
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node

Insert a Value
29
5
19
0
4
12
NULL
HeadPosition = 1
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=1

Insert a Value
30
5
19
0
4
12
NULL
HeadPosition = 1
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=1

Insert a Value
31
5
19
0
4
12
NULL
HeadPosition = 1
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=1

Insert a Value
32
5
19
0
4
12
NULL
HeadPosition = 1
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=1

Insert a Value
33
5
19
0
4
12
NULL
HeadPosition = 1
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=1
NULL

Insert a Value
34
5
19
0
4
12
NULL
HeadPosition = 1
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=1
10
NULL
NewNode

Insert a Value
35
5
19
0
4
12
NULL
HeadPosition = 1
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=1
10
NULL
NewNode

Insert a Value
36
5
19
0
4
12
NULL
HeadPosition = 1
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=1
10NewNode

Insert a Value
37
5
19
0
4
12
NULL
HeadPosition = 1
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=1
10NewNode

Insert a Value
38
5
19
0
4
12
NULL
Head
Position = 1
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=1
10
NewNode

Insert a Value
39
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If

Insert a Value
40
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If

Insert a Value
41
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node

Insert a Value
42
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=1

Insert a Value
43
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=1

Insert a Value
44
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=1

Insert a Value
45
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=2

Insert a Value
46
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=2

Insert a Value
47
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=2

Insert a Value
48
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=2

Insert a Value
49
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=3

Insert a Value
50
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=3

Insert a Value
51
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=3

Insert a Value
52
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=3

Insert a Value
53
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=4

Insert a Value
54
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=4

Insert a Value
55
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=4

Insert a Value
56
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
Current
Node
CurrentPos=4

Insert a Value
57
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
CurrentPos=4
Current
Node

Insert a Value
58
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
NULL
CurrentPos=1
Current
Node
NewNode

Insert a Value
59
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
10
NULL
CurrentPos=1
Current
Node
NewNode

Insert a Value
60
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
10
NULL
CurrentPos=1
Current
Node
NewNode

Insert a Value
61
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
10
CurrentPos=1
Current
Node
NewNode

Insert a Value
62
5
19
0
4
12
NULL
HeadPosition = 4
Value = 10
Algorithm InsertNode(Position, Value)
If Position < 1 Then return NULL
CurrentNode=Head
CurrentPos=1
While CurrentNode!= NULL
If CurrentPos== Position Then break
CurrentPos++
CurrentNode= CurrentNode.Next
End while
If CurrentNode== NULL Then return NULL
Create New Node NewNode
NewNode.Data= Value
If Position == 1
NewNode.Next= Head
Head = NewNode
Else
NewNode.Next= CurrentNode.Next
CurrentNode.Next= NewNode
End If
10
CurrentPos=1
Current
Node
NewNode

Practice Question
•If any function calls InsertValue() and the insert was
successful, how will the calling function know that
the insert was successful.
•May be there is something missing.
•Can you please point out that missing statement in
the algorithm?
63

Searching a Value
•We have learned two searching techniques:
•Sequential Search
•Binary Search
•In linked-lists, we can only do sequential search.
•It is because, linked-list is not a random access data structure.
64

Searching a Value
65
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL

Searching a Value
66
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
KEY = 12

Searching a Value
67
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
KEY = 12
CurrentNode

Searching a Value
68
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 1
KEY = 12
CurrentNode

Searching a Value
69
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 1
KEY = 12
CurrentNode

Searching a Value
70
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 1
KEY = 12
CurrentNode

Searching a Value
71
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 2
KEY = 12
CurrentNode

Searching a Value
72
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 2
KEY = 12
CurrentNode

Searching a Value
73
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 2
KEY = 12
CurrentNode

Searching a Value
74
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 2
KEY = 12
CurrentNode

Searching a Value
75
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 3
KEY = 12
CurrentNode

Searching a Value
76
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 3
KEY = 12
CurrentNode

Searching a Value
77
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 3
KEY = 12
CurrentNode

Searching a Value
78
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 3
KEY = 12
CurrentNode

Searching a Value
79
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 4
KEY = 12
CurrentNode

Searching a Value
80
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 4
KEY = 12
CurrentNode

Searching a Value
81
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 4
KEY = 12
CurrentNode

Searching a Value
82
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 4
KEY = 12
CurrentNode

Searching a Value
83
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 5
KEY = 12
CurrentNode

Searching a Value
84
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 5
KEY = 12
CurrentNode

Searching a Value
85
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 5
KEY = 12
CurrentNode

Searching a Value
86
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 5
KEY = 12
CurrentNode

Searching a Value
87
Algorithm SearchNode(Head, KEY)
CurrentNode=Head
Position=1
While CurrentNode!= NULL
If CurrentNode.Data== KEY
return Position
End If
Position++
CurrentNode= CurrentNode.Next
End while
return NULL
5 19 0 4 12 15 NULL
Head
Position = 5
return 5
KEY = 12
CurrentNode

Update a Value
88
Whenever you are at a node, pointed by CurrentNode, updationis easy:
CurrentNode.Data= NewValue
5 19 0 4 12 15 NULL
Head
KEY = 12
CurrentNode

Update a Node’s Value
89
Algorithm UpdateNode(Head, KEY, value)
CurrentNode=Head
While CurrentNode!= NULL
If CurrentNode.Data== KEY
CurrentNode.Data= value
End while
return NULL
5 19 0 4 12 15 NULL
Head
KEY = 12
CurrentNode
value = 07

•What if I want to update the value of the 4
th
Node?
Algorithm UpdateNode(Head, position, value)
90
Update a Node’s Value
90
19 0 4 12 15 NULL
Head CurrentNode
5

Delete a Value
9191
5 19 0 4 12 15 NULL
Head
CurrentNode
Algorithm DeleteNode(Value)

Delete a Value
92
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE

Delete a Value
93
5
19
0
4
12
NULL
HeadValue = 5
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE

Delete a Value
94
5
19
0
4
12
NULL
HeadValue = 5
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
NULL

Delete a Value
95
5
19
0
4
12
NULL
HeadValue = 5
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
NULL
Current
Node

Delete a Value
96
5
19
0
4
12
NULL
HeadValue = 5
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
NULL
Current
Node
Position=1

Delete a Value
97
5
19
0
4
12
NULL
HeadValue = 5
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
NULL
Current
Node
Position=1

Delete a Value
98
5
19
0
4
12
NULL
HeadValue = 5
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
NULL
Current
Node
Position=1

Delete a Value
99
5
19
0
4
12
NULL
HeadValue = 5
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
NULL
Current
Node
Position=1

Delete a Value
100
5
19
0
4
12
NULL
HeadValue = 5
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
NULL
Current
Node
Position=1

Delete a Value
101
5
19
0
4
12
NULL
Head
Value = 5
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
NULL
Current
Node
Position=1

Delete a Value
102
19
0
4
12
NULL
Head
Value = 5
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
NULL
Position=1

Delete a Value
103
19
0
4
12
NULL
Head
Value = 5
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
NULL
Position=1
return True

Delete a Value
104
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE

Delete a Value
105
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
NULL

Delete a Value
106
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
NULL
Current
Node

Delete a Value
107
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
NULL
Current
Node
Position=1

Delete a Value
108
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
NULL
Current
Node
Position=1

Delete a Value
109
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
NULL
Current
Node
Position=1

Delete a Value
110
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
NULL
Current
Node
Position=2

Delete a Value
111
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=2

Delete a Value
112
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=2

Delete a Value
113
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=2

Delete a Value
114
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=2

Delete a Value
115
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=3

Delete a Value
116
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=3

Delete a Value
117
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=3

Delete a Value
118
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=3

Delete a Value
119
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=3

Delete a Value
120
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=4

Delete a Value
121
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=4

Delete a Value
122
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=4

Delete a Value
123
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=4

Delete a Value
124
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=4

Delete a Value
125
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=5

Delete a Value
126
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=5

Delete a Value
127
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=5

Delete a Value
128
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=5

Delete a Value
129
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=5

Delete a Value
130
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=5

Delete a Value
131
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=5

Delete a Value
132
5
19
0
4
12
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Current
Node
Position=5

Delete a Value
133
5
19
0
4
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Position=5

Delete a Value
134
5
19
0
4
NULL
HeadValue = 12
Algorithm DeleteNode(Value)
PrevNode= NULL
CurrentNode= Head
Position = 1
While CurrentNode!= NULL
If CurrentNode.Data== Value Then break;
Position++
PrevNode= CurrentNode
CurrentNode= CurrentNode.Next
End while
If CurrentNode= NULL Then return FALSE
If PrevNode== NULL //First element to be deleted
Head = CurrentNode.Next
Else //Middle or End Element is to be deleted
PreviousNode.Next= CurrentNode.Next
End If
Delete CurrentNode
return TRUE
PrevNode
Position=5
return True

Advantages of Linked List
•Linked list is a dynamic data structure so it can grow and shrink at
runtime by allocating and deallocating memory. So there is no need
to give initial size of linked list.
•Insertion and deletion of nodes are really easier. Unlike array here we
don’t have to shift elements after insertion or deletion of an element.
In linked list we just have to update the address present in next
pointer of a node.
135

Advantages of Linked List
•As size of linked list can increase or decrease at run time so there is
no memory wastage. In case of array there is lot of memory wastage,
like if we declare an array of size 10 and store only 6 elements in it
then space of 4 elements are wasted. There is no such problem in
linked list as memory is allocated only when required.
136

Disadvantages of Linked List
•More memory is required to store elements in linked list as compared
to array. Because in linked list each node contains a pointer and it
requires extra memory for itself.
•Elements or nodes traversal is difficult in linked list. We can not
randomly access any element as we do in array by index. For example
if we want to access a node at position n then we have to traverse all
the nodes before it. So, time required to access a node is large.
137

Disadvantages of Linked List
•In linked list reverse traversing is really difficult. In case ofdoubly
linked listits easier but extra memory is required for back pointer
hence wastage of memory.
138

Cost of Operations
139
AccessSearch InsertionDeletion
Array O(1) O(n) O(n) O(n)
Singly Linked ListO(n) O(n) O(1) O(1)
Doubly Linked ListO(n) O(n) O(1) O(1)

Practice Question
•Suppose, we want a linked list such that whenever we
insert a value, it is inserted in a position such that it is
greater than or equal to the value of previous node
but less than the value of the next node. Such a
linked-list is called an Ordered Linked List. Write an
algorithm for its insert procedure.
140

DATA STRUCTURES AND
ALGORITHMS
Doubly Linked Lists
141

Doubly Linked List
•Doubly Linked List is a variation of Linked list in which navigation is
possible in both ways, either forward and backward easily as
compared to Single Linked List.
142

Operations on Doubly Linked List
1.Searching/Traversing
2.Updation
3.Inserting
1.In empty list
2.In front of list
3.In the middle of list
4.At the end
4.Deleting
1.First Node
2.Middle node
3.Last node
143

Node data
•info: the user's data
•next, back: the address of the next and
previous node in the list
.back .next.info

Doubly Linked Lists
•In a Doubly Linked List each item points to both its
predecessor and successor
•prevpoints to the predecessor
•nextpoints to the successor
10 7020 5540
Head
Cur
Cur->nextCur->prev

Node data (cont.)
template<class ItemType>
struct NodeType {
ItemType info;
NodeType<ItemType>* next;
NodeType<ItemType>* back;
};

Finding a List Item
•We no longer need to use prevLocation(we can
get the predecessor of a node using its back
member)

Finding a List Item (cont.)

FindItem(listData, item, location, found)
•RetrieveItem, InsertItem, and DeleteItemall require a search !
•Write a general non-member function SearchItemthat takes item as a
parameter and returns locationand found.
•InsertItemand DeleteItemneed location(ignore found)
•RetrieveItemneeds found (ignores location)

b

Finding a List Item (cont.)
template<class ItemType>
void FindItem(NodeType<ItemType>* listData, ItemType item,
NodeType<ItemType>* &location, bool &found)
{
// precondition: list is not empty
bool moreToSearch = true;
location = listData;
found = false;
while( moreToSearch && !found) {
if(item < location->info)
moreToSearch = false;
else if(item == location->info)
found = true;
else {
if(location->next == NULL)
moreToSearch = false;
else
location = location->next;
}
}
}

Inserting into a Doubly Linked List
1. newNode->back = location->back; 3. location->back->next=newNode;
2. newNode->next = location 4. location->back = newNode;

Inserting a Node
•Insert a node Newbefore Cur(not at front or rear)
10 7020 55
40Head
New
Cur
New->next = Cur;
New->prev = Cur->prev;
Cur->prev = New;
(New->prev)->next = New;

Special case: inserting in the beginning

Inserting into a Doubly Linked List
template<class ItemType>
void SortedType<ItemType>::InsertItem(ItemType item)
{
NodeType<ItemType>* newNode;
NodeType<ItemType>* location;
bool found;
newNode = new NodeType<ItemType>;
newNode->info = item;
if (listData != NULL) {
FindItem(listData, item, location, found);
if (location->info > item) {
newNode->back = location->back;
newNode->next = location;
if (location != listData) // special case
(location->back)->next = newNode;
else
listData = newNode;
location->back = newNode;
}
(1)
(2)
(3)
(4)
(3)

Inserting into a Doubly Linked List
(cont.)
else { // insert at the end
newNode->back = location;
location->next = newNode;
newNode->next = NULL;
}
}
else { // insert into an empty list
listData = newNode;
newNode->next = NULL;
newNode->back = NULL;
}
length++;
}

Deleting from a Doubly Linked List
•Be careful about the end cases!!

Deleting a Node
•Delete a node Cur(not at front or rear)
(Cur->prev)->next = Cur->next;
(Cur->next)->prev = Cur->prev;
delete Cur;
10 7020 5540
Head
Cur

Doubly Linked List Operations
*insertNode(NodePtr Head, int item)
//add new node to ordered doubly linked list
*deleteNode(NodePtr Head, int item)
//remove a node from doubly linked list
*searchNode(NodePtr Head, int item)
*print(NodePtr Head, int item)

NodePtr searchNode(NodePtr Head, int item){
NodePtr Cur = Head->next;
while(Cur != Head){
if(Cur->data == item)
return Cur;
if(Cur->data < item)
Cur = Cur->next;
else
break;
}
return NULL;
}
Searching a node:

void print(NodePtrHead){
NodePtrCur=Head->next;
while(Cur != Head){
cout<< Cur->data << " ";
Cur = Cur->next;
}
cout<< endl;
}
Print the whole circular list:

Circular Linked List
•Circular Linked List is a variation of Linked list in which the first
element points to the last element and the last element points to the
first element.
•Both Singly Linked List and Doubly Linked List can be made into a
circular linked list.
•In doubly linked list, the next pointer of the last node points to the
first node and the previous pointer of the first node points to the last
node making the circular in both directions.
162

Operations on Circular Linked List
1.Searching/Traversing
2.Updation
3.Inserting
1.In empty list
2.In front of list
3.In the middle of list
4.At the end
4.Deleting
1.First Node
2.Middle node
3.Last node
163

Operations on Circular Linked List
1.Searching/Traversing
2.Updation
3.Inserting
1.In empty list
2.In front of list
3.In the middle of list
4.At the end
4.Deleting
1.First Node
2.Middle node
3.Last node
164

Advantages of Linked List
•Linked list is a dynamic data structure so it can grow and shrink at
runtime by allocating and deallocating memory. So there is no need
to give initial size of linked list.
•Insertion and deletion of nodes are really easier. Unlike array here we
don’t have to shift elements after insertion or deletion of an element.
In linked list we just have to update the address present in next
pointer of a node.
165

Advantages of Linked List
•As size of linked list can increase or decrease at run time so there is
no memory wastage. In case of array there is lot of memory wastage,
like if we declare an array of size 10 and store only 6 elements in it
then space of 4 elements are wasted. There is no such problem in
linked list as memory is allocated only when required.
166

Disadvantages of Linked List
•More memory is required to store elements in linked list as compared
to array. Because in linked list each node contains a pointer and it
requires extra memory for itself.
•Elements or nodes traversal is difficult in linked list. We can not
randomly access any element as we do in array by index. For example
if we want to access a node at position n then we have to traverse all
the nodes before it. So, time required to access a node is large.
167

Disadvantages of Linked List
•In linked list reverse traversing is really difficult. In case ofdoubly
linked listits easier but extra memory is required for back pointer
hence wastage of memory.
168

Practice Question
•Suppose, we want a linked list such that whenever we
insert a value, it is inserted in a position such that it is
greater than or equal to the value of previous node
but less than the value of the next node. Such a
linked-list is called an Ordered Linked List. Write an
algorithm for its insert procedure.
169

Cost of Operations
170
Tags