Professional Documents
Culture Documents
Lec 7 Doubly Linked List
Lec 7 Doubly Linked List
AND ALGORITHMS
Momina Moetesum
Dept of CS
Bahria University, Islamabad
1
INTRODUCTION
prev
next
first 9 17 22 26 34
last
3
Node of a doubly linked
list
*Previous Data *Next
Linked list
class Node {
int data;
Node* next;
};
15 17 20
node *temp;
temp = new node;
temp->prev = NULL;
temp->data = value;
// If list has no elements
if (start == NULL)
{
start = temp;
temp->next=NULL;
return;
}
// List has element(s)
temp->next = start;
start->prev = temp;
start = temp;
}
10
void DoublyList::add_after(int value, int position){
// List is Empty
if (start == NULL)
{
cout<<"First Create the list."<<endl;
return;
}
node *tmp, *q;
int i;
q = start;
//Take the pointer to desired index
for (i = 1;i < position;i++)
{
q = q->next;
if (q == NULL)
{
cout<<"There are less than ";
cout<<position<<" elements."<<endl;
return; 11
}
}
//Create a new node
tmp = new node;
tmp->data = value;
} 12
}
void DoublyList::delete_element(int value){
Node *p, *q;
q =0;
p = start;
while (p!=0 && p->data != value){
q = p;
p = p->next;
}
if (p == 0){
cout << "ERROR: Value sought not found.";
return;
}
if (q == 0){ //First Node to be deleted
start = start->next;
start->prev = NULL;
delete p;
return; 13
}
//Last node to be deleted
if(p->next==0){
q->next=0;
delete p;
return;
}
q->next = p->next;
p->next->prev = q;
delete p;
}
14
void DoublyList::reverse(){
Node *p1, *p2;
p1 = start;
p2 = p1->next;
p1->next = NULL;
p1->prev = p2;