0% found this document useful (0 votes)
28 views30 pages

Lecture 5 - Linked List Variations

The document discusses linked lists and their variations. It begins by covering the advantages and disadvantages of linked lists, such as their flexibility for insertion and deletion but slower direct access compared to arrays. It then describes variations like doubly linked lists that allow traversal in both directions, and circular linked lists that have no null next pointers. Examples of linked list applications include implementing stacks, queues, and undo functionality. The document concludes by explaining how to reverse the order of nodes in a linked list using three pointers.

Uploaded by

Prhna Wala Bacha
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
28 views30 pages

Lecture 5 - Linked List Variations

The document discusses linked lists and their variations. It begins by covering the advantages and disadvantages of linked lists, such as their flexibility for insertion and deletion but slower direct access compared to arrays. It then describes variations like doubly linked lists that allow traversal in both directions, and circular linked lists that have no null next pointers. Examples of linked list applications include implementing stacks, queues, and undo functionality. The document concludes by explaining how to reverse the order of nodes in a linked list using three pointers.

Uploaded by

Prhna Wala Bacha
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 30

CS-2001

Data Structures
Spring 2023
Link List – Variations and Applications

Dr. Khalid Hussain


Mr. Muhammad Usman Joyia
National University of Computer and
Emerging Sciences,
Faisalabad, Pakistan.
Roadmap

Previous Lecture
• Introduction to linked lists
• A pointer-based implementation in C++

Today
• Pors and Cons of linked lists
• Variations of linked lists
– Doubly linked lists
– Circular Linked lists

2
Linked List – Advantages
• Access any item as long as link to first item is maintained

• Insert new item without shifting

• Delete existing item without shifting

• Can expand/contract (flexible) as necessary

3
Linked List – Disadvantages (1)
• Overhead of links
– Extra space for pointers with each item-node, pure overhead

• Dynamic, must provide


– Destructor (to destroy all the dynamic allocations one-by-one)

• No longer have direct access to each element of the list


– Many sorting algorithms need direct access
– Binary search needs direct access

• Access of nth item now less efficient


– Must go through first element, then second, and then third, etc.

4
Linked List – Disadvantages (2)
• List-processing algorithms that require fast access to each element
cannot be done as efficiently with linked lists
• Consider adding an element at the end of the list

Array Linked List


a[size++] = value;

5
Linked List – Disadvantages (3)
• List-processing algorithms that require fast access to each element
cannot be done as efficiently with linked lists
• Consider adding an element at the end of the list

Array Linked List


a[size++] = value; Get a new node;
Set data part = value
next part = null_value

6
Linked List – Disadvantages (4)
• List-processing algorithms that require fast access to each element
cannot be done as efficiently with linked lists
• Consider adding an element at the end of the list

Array Linked List


a[size++] = value; Get a new node;
Set data part = value
next part = null_value
If list is empty
Set head to point to new node

7
Linked List – Disadvantages (5)
• List-processing algorithms that require fast access to each element
cannot be done as efficiently with linked lists
• Consider adding an element at the end of the list

Array Linked List


a[size++] = value; Get a new node;
Set data part = value
next part = null_value
If list is empty
Set head to point to new node
Else
Traverse list to find last node
Set next part of last node to point
This is the inefficient part
to new node

8
Some Applications
• Main: Implement many other abstract datatypes such as stacks,
queues, binary trees, and fib. heaps etc.

• Applications that maintain a Most Recently Used (MRU) list


– For example, a linked list of file names
• Cache in the browser that allows to hit the BACK button
– A linked list of URLs
• Undo functionality in Photoshop or Word processor
– A linked list of state
• A list in the GPS of the turns along your route

Can we traverse the linked list in the reverse direction!

9
Reverse the list

• Input: head ->30->25->20->15->10->5

• Reversed : head ->5->10->15->20->25->30

• Use three pointer (Current, previous, Next)


• While traversing the list just invert the links
• When final node reaches then store the address of end node in the
head pointer

10
void List :: Reverse(){

1. Node *upcoming,*prev, *current;


2. current = head;
3. prev = NULL;
4. while (current!=NULL)
5. {
6. upcoming = current->next;
7. current->next=prev;
8. prev = current;
9. current = upcoming;
10. }
11. head = prev;
}
11
Doubly Linked List

12
Doubly Linked List
• Every node contains the address of the previous node except the
first node
– Both forward and backward traversal of the list is possible

next

x a b c

head prev tail

13
Node Class
• Node class contains three data members
– data: double-type data in this example
– next: a pointer to the next node in the list
– Prev: a pointer to the pervious node in the list

class Node {
public:
double data; // data
Node* next; // pointer to next
Node* prev; // pointer to previous
};

14
List Class
• List class contains two pointers
– head: a pointer to the first node in the list
– tail: a pointer to the last node in the list
– Since the list is empty initially, head and tail are set to NULL

class List {
public:
List(void) { head = NULL; tail = NULL; } // constructor
~List(void); // destructor

. . .

private:
Node* head;
Node* tail;
};

15
Adding First Node

head a tail

// Adding first node


head = new Node;
head->next = null;
head->prev = null;
tail = head;

16
Inserting a Node in Doubly Linked List (1)
• To add a new item after the linked list node pointed by current

x a c

head tail
current

newNode = new Node


newNode->prev = current;
newNode->next = current->next;
newNode->prev->next = newNode;
newNode->next->prev = newNode;
current = newNode;

17
Inserting a Node in Doubly Linked List (2)
• To add a new item after the linked list node pointed by current

x a c

head b
tail
current

newNode = new DoublyLinkedListNode


newNode->prev = current;
newNode->next = current->next;
newNode->prev->next = newNode;
newNode->next->prev = newNode;
current = newNode;

18
Inserting a Node in Doubly Linked List (3)
• To add a new item after the linked list node pointed by current

x a c

head b tail
current

newNode = new DoublyLinkedListNode


newNode->prev = current;
newNode->next = current->next;
newNode->prev->next = newNode;
newNode->next->prev = newNode;
current = newNode;

19
Inserting a Node in Doubly Linked List (3)
• To add a new item after the linked list node pointed by current

x a c

head b tail
current

newNode = new DoublyLinkedListNode


newNode->prev = current;
newNode->next = current->next;
newNode->prev->next = newNode;
newNode->next->prev = newNode;
current = newNode;

20
Inserting a Node in Doubly Linked List (3)
• To add a new item after the linked list node pointed by current

x a c

head b
current tail

newNode = new DoublyLinkedListNode


newNode->prev = current;
newNode->next = current->next;
newNode->prev->next = newNode; //Current->next = newNode
newNode->next->prev = newNode;
current = newNode;

21
Inserting a Node in Doubly Linked List (3)
• To add a new item after the linked list node pointed by current

x a c

head b tail
current

newNode = new DoublyLinkedListNode


newNode->prev = current;
newNode->next = current->next;
newNode->prev->next = newNode;
newNode->next->prev = newNode;
current = newNode;

22
Inserting a Node in Doubly Linked List (3)
• To add a new item after the linked list node pointed by current

x a c

head b tail
current
newNode = new DoublyLinkedListNode
newNode->prev = current;
newNode->next = current->next;
newNode->prev->next = newNode;
newNode->next->prev = newNode;
current = newNode;

23
Deleting a Node From Doubly Linked List
• Suppose current points to the node to be deleted from the list

x a c

head b
current

oldNode = current;
oldNode->prev->next = oldNode->next;
oldNode->next->prev = oldNode->prev;
current = oldNode->prev;
delete oldNode;
24
Deleting a Node From Doubly Linked List
• Suppose current points to the node to be deleted from the list

x a c

head b
current
oldNode
oldNode = current;
oldNode->prev->next = oldNode->next;
oldNode->next->prev = oldNode->prev;
current = oldNode->prev;
delete oldNode;
25
Deleting a Node From Doubly Linked List
• Suppose current points to the node to be deleted from the list

x a c

head b
current
oldNode
oldNode = current;
oldNode->prev->next = oldNode->next;
oldNode->next->prev = oldNode->prev;
current = oldNode->prev;
delete oldNode;
26
Deleting a Node From Doubly Linked List
• Suppose current points to the node to be deleted from the list

x a c

head b
current
oldNode
oldNode = current;
oldNode->prev->next = oldNode->next;
oldNode->next->prev = oldNode->prev;
current = oldNode->prev;
delete oldNode;
27
Deleting a Node From Doubly Linked List
• Suppose current points to the node to be deleted from the list

x a c

head b
current
oldNode
oldNode = current;
oldNode->prev->next = oldNode->next;
oldNode->next->prev = oldNode->prev;
current = oldNode->prev;
delete oldNode;
28
Deleting a Node From Doubly Linked List
• Suppose current points to the node to be deleted from the list

x a c

head
current

oldNode = current;
oldNode->prev->next = oldNode->next;
oldNode->next->prev = oldNode->prev;
current = oldNode->prev;
delete oldNode;
29
Any Question So Far?

33

You might also like