2. LINKED LIST
DEFINITION
ARRAY Vs LINKED LIST
TYPES
OPERATIONS
3. Introduction
Linear data structure
Dynamic data structure
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
NODE : Info link
Data Pointer
item
4. REPRESENTATION OF A LINKED
LIST WITH 3 NODES
Start
Data item Data item Data item X
Head: pointer to the first node
The last node points to NULL
6. VARIATIONS OF LINKED LIST
Header linked list
Circular linked list
Two-way list(doubly linked list)
7. Variations of Linked Lists
header linked lists
◦ A linked list with a special node called header
node in the beginning of the list
A B C X
Head header node
◦ Header node doesn’t contain the actual data.
8. Variations of Linked Lists
Circular linked lists
◦ The last node points to the first node of the list
A B C
Head
◦ 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.)
9. 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 B C
Back info
forw
Head Tail
10. Operations on singly linked
list
Creation
Traversing(visiting)
Counting
Insertion
Deletion
Searching
Merging(concatenating two lists)
Reversing the list
Updating
Copying
11. Algorithm to traverse and count
one-way list
Set PTR=HEAD.
Set count =0.
Repeat step while PTR!=NULL
• Apply process to INFO[PTR].
• Set COUNT=COUNT+1
• Set PTR=LINK[PTR].
Write : COUNT
EXIT
12. Algorithm to search an element
ITEM in an unsorted one-way
list HEAD=NULL, then
Set
• Write: “list is empty”
• Set LOC= NULL
• And exit
Set PTR=HEAD
Repeat while PTR=!NULL
• If ITEM=INFO[PTR]
• Set LOC=PTR
• And exit
• Else
• Set PTR=LINK[PTR]
14. Algorithm to search an element
ITEM in an unsorted one-way list
Set HEAD=NULL, then
• Write: “list is empty”
• Set LOC= NULL
• And exit
Set PTR=HEAD
Repeat while PTR=!NULL
• If ITEM=INFO[PTR]
• Set LOC=PTR
• Write:”search is successful”
• And exit
• Else if ITEM>INFO[PTR]
• Set PTR=LINK[PTR]
• Else[ITEM<INFO[PTR]]
• Set LOC=NULL
• Write:”search is unsuccessful”
• And exit
16. Algorithm to insert an element
ITEM at the begnning one-way
list
If AVAIL=NULL, then
• Write:”overflow”
• And exit
Set NEW=AVAIL
• Set AVAIL=LINK[AVAIL]
Set INFO[NEW]=ITEM
Set LINK[NEW]=HEAD
• Set HEAD= NEW
EXIT
17. Algorithm to insert an node after
a node with location LOC in
one-way list
If AVAIL=NULL, then
• Write:”overflow”
• And exit
Set NEW=AVAIL
• Set AVAIL=LINK[AVAIL]
Set INFO[NEW]=ITEM
If LOC =NULL, then
• Set LINK[NEW]=HEAD
• Set HEAD =NEW
19. Algorithm to delete first node of
one-way list
If HEAD=NULL, then
• Write:”underflow”
• And exit
Set NEW=HEAD
• Set HEAD=LINK[HEAD]
Set LINK[NEW]=AVAIL
• Set AVAIL=NEW
EXIT
20. Algorithm to delete a node with
location LOC from one-way list
If HEAD=NULL, then
• Write:”underflow”
• And exit
If LOC=NULL, THEN
• Write:”node not found in the list
• And exit
If LOCP=NULL, then
• Set HEAD=LINK[HEAD]
Else
• Set LINK[LOCP]=LINK[LOC]
22. 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
In array, Insertion and deleltion are more time consuming as
large no. of elements need to be shifted to make space for
inserting a new element or to cover the space created by
deleting an existing element.
With a linked list, no need to move other nodes. Only need to
reset some pointers.