In The Name of Allah The Most Beneficent The Most Merciful: Subject: Data Structures & Algorithms
In The Name of Allah The Most Beneficent The Most Merciful: Subject: Data Structures & Algorithms
Lecture : 09
currentNode
headNode 2 size=1
list.add(2);
lastcurrentNode
Building a Linked List
List list; headNode size=0
currentNode
headNode 2 size=1
list.add(2);
lastcurrentNode
currentNode
lastcurrentNode
Building a Linked List
currentNode
headNode 2 6 8 7 1 size=5
lastcurrentNode
C++ Code for Linked List
int get() {
if (currentNode != NULL)
return currentNode->get();
};
C++ Code for Linked List
bool next() {
if (currentNode == NULL) return false;
lastCurrentNode = currentNode;
currentNode = currentNode->getNext();
if (currentNode == NULL || size == 0)
return false;
else
return true;
};
C++ Code for Linked List
// position current before the first
// list element
void start() {
lastCurrentNode = headNode;
currentNode = headNode;
};
C++ Code for Linked List
void remove() {
if( currentNode != NULL &&
currentNode != headNode) {
lastCurrentNode->setNext(currentNode->getNext());
delete currentNode;
currentNode = lastCurrentNode->getNext();
size--;
}
};
currentNode
headNode
2 6 8 7 1 size=5
lastcurrentNode
C++ Code for Linked List
void remove() {
if( currentNode != NULL &&
currentNode != headNode) {
1 lastCurrentNode->setNext(currentNode->getNext());
delete currentNode;
currentNode = lastCurrentNode->getNext();
size--;
}
};
currentNode
headNode
1
2 6 8 7 1 size=5
lastcurrentNode
C++ Code for Linked List
void remove() {
if( currentNode != NULL &&
currentNode != headNode) {
1 lastCurrentNode->setNext(currentNode->getNext());
2 delete currentNode;
currentNode = lastCurrentNode->getNext();
size--;
}
};
currentNode
headNode
1
2 8 7 1 size=5
2
lastcurrentNode
C++ Code for Linked List
void remove() {
if( currentNode != NULL &&
currentNode != headNode) {
1 lastCurrentNode->setNext(currentNode->getNext());
2 delete currentNode;
3 currentNode = lastCurrentNode->getNext();
4 size--;
}
3
};
currentNode
headNode
1 4
2 8 7 1 size=4
2
lastcurrentNode
C++ Code for Linked List
int length()
{
return size;
};
private:
int size;
Node *headNode;
Node *currentNode, *lastCurrentNode;
Example of List Usage
#include <iostream>
#include <stdlib.h>
#include "List.cpp"
AL 18
Doubly-linked List
Moving forward in a singly-linked list is easy;
moving backwards is not so easy.
Doubly-linked List
Moving forward in a singly-linked list is easy;
moving backwards is not so easy.
To move back one node, we have to start at
the head of the singly-linked list and move
forward until the node before the current.
Doubly-linked List
Moving forward in a singly-linked list is easy;
moving backwards is not so easy.
To move back one node, we have to start at
the head of the singly-linked list and move
forward until the node before the current.
To avoid this we can use two pointers in a
node: one to point to next node and another to
point to the previous node:
AL 23
Doubly-Linked List Node
class Node {
public:
int get() { return object; };
void set(int object) { this->object = object; };
head 2 6 8 7 1 size=5
current
Doubly-linked List
1. newNode->setNext( current->getNext() );
current
head 2 6 8 7 1 size=5
newNode 9 1
Doubly-linked List
1. newNode->setNext( current->getNext() );
2. newNode->setprev( current );
current
head 2 6 8 7 1 size=5
newNode 9 1
Doubly-linked List
1. newNode->setNext( current->getNext() );
2. newNode->setprev( current );
3. (current->getNext())->setPrev(newNode);
current
head 2 6 8 7 1 size=5
2 3
newNode 9 1
Doubly-linked List
1. newNode->setNext( current->getNext() );
2. newNode->setprev( current );
3. (current->getNext())->setPrev(newNode);
4. current->setNext( newNode );
current
head 2 6 8 7 1 size=5
2 4 3
newNode 9 1
Doubly-linked List
1. newNode->setNext( current->getNext() );
2. newNode->setprev( current );
3. (current->getNext())->setPrev(newNode);
4. current->setNext( newNode );
5. current = newNode;
6. size++;
head 2 6 8 7 1 size=6
2 4 3
newNode 9 1
current
Doubly-linked List
AL 31
Represent a Doubly Linked list graphically
AL 32
Represent a Doubly Linked list graphically
AL 33
Represent a Doubly Linked list graphically
AL 34
Represent a Doubly Linked list graphically
AL 35
Advantages of Doubly Linked List
AL 36
Disadvantages of Doubly Linked List
AL 37