• Definition: A linked list is a set of nodes where each node has two fields 'data' and a 'link'. Where data field stores the actual piece of information and 'link' field is used to point to next node. Basically link field is nothing but the address only.
Linked
List
AU: Dec.-15,18,19, May-16, Marks 16
•
Definition: A linked list is a set
of nodes where each node has two fields 'data' and a 'link'. Where data field
stores the actual piece of information and 'link' field is used to point to
next node. Basically link field is
nothing but the address only.
•
Note that the link field of last node consists of 'NULL' which indicates end of
linked list.
'C' structure
typedef
struct node
{
int
data; /* data field */
struct node * next; /* link field */
}
SLL;
while
declaring C structure for a linked list -
•
Declare a structure in which two members are there i.e. data member and next
pointer member.
•
The data member can be character or
integer or real kind of data depending upon the type of the information that
the linked list is having.
•
The 'next' member is essentially of
a pointer type. And the pointer should be of structure type. Because the 'next' field holds the address of next
node. And each node is basically a structure consisting of 'data' and 'next'.
There
are various types of linked lists such as,
•
Singly linear linked list
•
Singly circular linked list
•
Doubly linear linked list
•
Doubly circular linked list.
Let
us see each of the above one by one.
• Singly linear linked list :
It
is called singly because this list consists of only one link, to point to next
node or element. This is also called linear list because the last element
points to nothing it is linear is nature. The last field of last node is NULL
which means that there is no further list. The very first node is called head
or first.
• Singly circular linked list :
In
this type of linked list only one link is used to point to next element and
this list is circular means that the last node's link field points to the first
or head node. That means according to example after 40 the next number will be
10. So the list is circular in nature.
•
Doubly linear linked list :
This
list called doubly because each node has two pointers previous and next
pointers. The previous pointer points to previous node and next pointer points
to next node. Only in case of head node the previous pointer is obviously NULL
and last node's next pointer points to NULL. This list is a linear one.
• Doubly circular linked list:
In
circular doubly linked list the previous pointer of first node and the next
pointer of last node is pointed to head node. Head node is a special node which
may have any dummy data or it may have some useful information such as total
number of nodes in the list which may be used to simplify the algorithms
carrying various operations on the list.
•
Various operations of linked list are -
1.
Creation of linked list.
2.
Display of linked list.
3.
Insertion of any element in the linked list
4.
Deletion of any element from the linked list
5.
Searching of desired element in the linked list.
We
will discuss each operation one by one
1. Creation of linked list
node*
create()
{
node
*temp, *New, *head;
int
val, flag;
char
ans='y';
node
*get_node();
temp
= NULL;
flag
= TRUE; /* flag to indicate whether a new node is created for the first time or
not */
do
{
printf("\nEnter
the Element :");
scanf("%d",
&val);
seoqug
/* allocate new node */
New
= get_node();
if
(New == NULL)
printf("\nMemory
is not allocated");
New
→ data =val;
if
(flag==TRUE) /* Executed only for the first time */
{
head
= New;
0.ebon
Jer
temp
= head; /*head is a first node in the SLL*/
flag
= FALSE;
}
else
{
/*
temp keeps track of the most recently created node */
temp
→ next = New;
temp
= New;
}
printf("\n
Do you Want to enter more elements? (y/n)");
ans=getche();
}
while(ans == 'y');
printf("\nThe
Singly Linked List is created\n");
getch();
clrscr();
return
head;
}
node
*get_node()
{
node
*temp;
temp=(
node *) malloc(sizeof(node));
temp
→ next = NULL;
return
temp;
}
Creation of linked list (logic
explanation part) :
Initially
one variable flag is taken whose value is initialized to TRUE (i.e. 1). The
purpose of flag is for making a check on creation of first node. That means if
flag is TRUE then we have to create head node or first node of linked list.
Naturally after creation of first node we will reset the flag (i.e. assign
FALSE to flag). Consider that we have entered the element value 10 initially
then,
Step 1:
New
= New get_node ();
/*
memory gets allocated for New node */
New
→ data=: Val;
/*
value 10 will be put in data field of New */
Step 2:
if
(flag == TRUE)
{
head=New
temp=head;
/*
We have also called this node as temp because head's address will be preserved
in 'head' and we can change 'temp' node as per requirement */
flag
= FALSE;
/*
After creation of first node flag is reset */
Step 3:
If head node of linked list is created we
can further create a linked list by attaching the subsequent nodes. Suppose we
want to insert a node with value 20 then,
Step 4:
If
user wants to enter more elements then let say for value 30 the scenario will
be,
Then
for value 40
Step 5:
is
the final linked list.
2. Display of linked list
We
are passing the address of head node to the display routine and calling head as
the 'temp' node. If the linked list
is not created then naturally head-temp node will be NULL. Therefore the message "The list is empty" will be
displayed.
void
display(node *head)
{to
iluests A gool sli
node
*temp;
temp
= head;
if
(temp==NULL)
{
printf("\nThe
list is empty\n");
getch();
clrscr();
return;
}.
while
(temp != NULL)
{
printf("%d
→ ", temp →data);
temp
= temp →next;
printf("NULL");
getch();
clrscr();
}
If
we have created some linked list like this then -
As
now value of temp becomes NULL we will come out of while loop. As a result of
such display routine we will get,
10
20 30 40 50 → NULL
will
be printed on console.
3. Insertion of any element at
anywhere in the linked list
There
are three possible cases when we want to insert an element in the linked list -
a)
Insertion of a node as a head node
b)
Insertion of a node as a last node
c)
Insertion of a node after some node.
We
will see the case a) first -
node
*insert_head(node *head)
{
node
*New,*temp;
New-get_node();
printf("\n
Enter The element which you want to insert");
scanf("%d",
&New→data);
if(head==
NULL)
Now
we will insert a node at the end -
void
insert last (node *head)
{
node
*New,*temp;
New
get_node();
printf("\n
Enter The element which you want to insert");
scanf("%d",
&New→data);
if(head
== NULL)
head=New;
else
Finding
end of the linked list. Then temp will be a last node
{
temp=head;
while(temp
→next!=
NULL)
temp-temp
→next;
temp
→next=New;
New
→next=NULL;
}
}
To
attach a node at the end of linked list assume that we have already created a
linked list like this-
Now
we will insert a new node after some node at intermediate position
void
insert after(node *head)
{
int
key;
node
*New,*temp;
New=
get_node();
printf("\n
Enter The element which you want to insert");
scanf("%d",&New→data);
if(head=
NULL)
{
head=New;
}
Else
{
printf("\n
Enter The element after which you want to insert the node");
scanf("%d",
&key);
temp=head;
do
{
if(temp
→data==key)
{
New
→next=temp
→next;
temp
→next=New;
return;
}
else
temp-temp
→next;
}while(temp!=
NULL);
}
}
If
we want to insert 31 in the linked list which is already created. We want to
insert this 31 after node containing 30 then
Thus
desired node gets inserted at desired position.
4. Deletion of any element from the
linked list
void
dele(node **head)
{
node
*temp, *prev;
int
key;
temp
=*head;
if
(temp == NULL)
{
printf("\nThe
list is empty\n");
getch();
Always
check before deletion whether come? the linked list is empty or not. Because if
the list is empty there is no point in performing deletion
clrscr();
return
}
clrscr();
printf("\nEnter
the Element you want to delete: ");
scanf("%d",
&key);
temp
= search(*head,key);
if
(temp != NULL)
Firstly,
Node to be deleted is searched in the linked list
{
prev
= get_prev(*head,key);
if
(prev != NULL)
{
prev
→ next = temp→next;
free
(temp);
Once
the node to be deleted is found then get the previous node of that node in
variable prev
}
else
{
*head=temp
→next;
free(temp);
If
we want to delete head node then set adjacent node as a new head node and then
deallocate the previous head node
}
printf("\nThe
Element is deleted\n");
getch();
}
}
Suppose
we have,
Suppose
we want to delete node 30. Then we will search the node containing 30, using search (*head, key) routine. Mark the
node to be deleted as temp. Then we
will obtain previous node of temp
using get_prev () function. Mark
previous node as prev
This
can be done using following statements.
*head
= temp → next;
free
(temp);
5. Searching of desired element in
the linked list
The
search function is for searching the node containing desired value. We pass the
head of the linked list to this routine so that the complete linked list can be
searched from the beginning.
node
*search(node *head, int key)
{
node
*temp;
int
found;
temp
=head
if (temp == NULL)
{
printf("The
Linked List is empty\n");
getch();
clrscr();
return
NULL;
}
found
= FALSE;
while
(temp != NULL && found == FALSE)
{
if
(temp→data != key)
temp
= temp→next;
else
Compare
each node with the key value. If not matching then move to next node
Found
=TRUE;
}
if
(found ==TRUE)
{
If
the node containing desired data is obtained in the linked list then found
variable is set to TRUE.
printf("\nThe
Element is present in the list\n");
getch();
return
temp;
}
else
{
printf("The
Element is not present in the list\n");
getch();
return
NULL;
}
}
Consider
that we have created a linked list as
Suppose
key = 30 i.e. we want a node containing value 30 then compare temp→ data and key value. If there is no match then we will mark next node as temp.
Hence
print the message "The Element is
present in the list".
Thus
in search operation the entire list can be scanned in search of desired node.
And still, if required node is not obtained then we have to print the message.
"The Element is not present in
the list"
Let
us see the complete program for it -
Ex.
3.5.1: Implementation of various operations on singly linked list
/*****************************************************************
Program
to perform various operations such as creation, insertion, deletion, search and
display on singly link lists.
************************************************************/
#include
<stdio.h>
#include
<conio.h>
#include
<stdlib.h>
#define
TRUE 1
#define
FALSE 0
typedef
struct SLL
{
int
data;
struct
SLL *next;
}node;
node
*create();
void
main()
{
/*
Local declarations */
int
choice, val;
char
ans;
node
*head;
void
display(node *);
node
*search(node *,int);
node
*insert(node *);
void
dele(node **);
head
=NULL;
do
{
clrscr();
printf("\nProgram
to Perform Various operations on Linked List");
printf("\n1.Create");
printf("\n2.Display");
printf("\n3.Search
for an item");
printf("\n4.Insert
an element in a list");
printf("\n5.Delete an element from
list");
printf("\n6.Quit");
printf("\nEnter
Your Choice (1-6) ");
scanf("%d", &choice);
switch(
choice)
{
case
1: head=create();
break;
case
2: display(head);
break;
case
3: printf("Enter the element you want to search");
scanf("%d",
&val);
search(head,
val);
break;
case
4: head-insert(head);
break;
case
5: dele(&head);
break;
case
6 exit(0);
default:clrscr();
printf("Invalid
Choice, Try again");
getch();
}
}
while(choice != 6);
}
node*
create()
{
node
*temp, *New, *head;
int
val, flag;
char
ans='y';
node
*get_node();
temp
= NULL;
flag=TRUE;
/* flag to indicate whether a new node is created for the first time or not */
do
{
printf("\nEnter
the Element :");
scanf("%d",
&val);
/*
allocate new node */
New
= get_node();
if
(New==NULL)
printf("\nMemory
is not allocated");
New
→ data = val;
if
(flag==TRUE) /* Executed only for the first time */
{
head
= New;
temp-head;
/*head is a first node in the SLL*/
flag = FALSE;
}
else
{
/*
temp keeps track of the most recently created node */
temp
→next=New;
temp
=New;
}
rintf("\n
Do you Want to enter more elements?(y/n)");
ans=getche();
}while(ans=='y');
printf("\nThe
Singly Linked List is created\n");
getch();
clrscr();
return
head;
}
node
*get_node()
{
node
*temp;
temp=(
node *) malloc(sizeof(node) );
temp
→next
= NULL;
return
temp;
}
void
display(node *head)
{
node
*temp;
temp=head;
if
(temp == NULL)
{
printf("\nThe
list is empty\n");
getch();
clrscr();
return;
}
while
(temp != NULL)
{
printf("%d
→ ", temp →data);
temp=temp
→next;
}
printf("NULL");
getch();
clrscr();
node
*search(node *head, int key)
{
node
*temp;
int
found;
temp
= head;
if
(temp==NULL)
{
printf("The
Linked List is empty\n");
getch();
clrscr();
return
NULL;
}
found
= FALSE;
while
(temp != NULL && found == FALSE)
{
if
(temp →data
!= key)
temp
= temp →next;
else
found=TRUE;
}
if
(found ==TRUE)
{
printf("\nThe
Element is present in the list\n");
getch();
return
temp;
}
else
{
printf("The
Element is not present in the list\n");
getch();
return
NULL;
}
}
/*
The
insert function
Input:Address
of starting node of the list
Output:inserts
an element into the list
Parameter
Passing Method: call by value
Called
By:main
Calls
search()
*/
node
*insert(node *head)
{
int
choice;
node
*insert_head(node *);
void
insert_after(node *);
void
insert last(node *);
printf("\n
1. Insert a node as a head node");
printf("\n
2. Insert a node as a last node");
printf("\n
3. Insert a node at intermediate position in the linked list");
printf("\n
Enter the your choice for insertion of node");
scanf("%d",
&choice);
switch(choice)
{
case
1:head-insert_head (head);
break;
case
2:insert_last(head);
break;
case
3:insert_after(head);
break;
}
New
head is returned from function insert_head().
Hence
we have to return the new head from the insert
function to main
return
head;
}
/*
Insertion of node at first position*/
node
*insert_head(node *head)
{
node
*New,*temp;
New=get_node();
printf("\n
Enter The element which you want to insert");
scanf("%d",&
New →data);
if(head
== NULL)
head=New;
else
{
temp-head;
New
→next=temp;
head=New;
}
return
head;
}
/*Insertion
of node at last position*/
void
insert_last (node *head)
No
node in the linked list. i.e. when linked list is empty.
{
node
*New,*temp;
New=get_node();
printf("\n
Enter The element which you want to insert");
scanf("%d",
&New→data);
if(head
== NULL)
head=New;
else
:{
temp=head;
while(temp
→next!=
NULL)
temp-temp
→next;
temp
→next=New;
New
→next
= NULL;
}
}
/*Insertion
of node at intermediate position */
void
insert_after(node *head)
{
int
key;
node
*New,*temp;
New=
get_node();
printf("\n
Enter The element which you want to insert");
scanf("%d",
&New →data);
if(head
== NULL)
{
head=New;
}
else
{
printf("\n
Enter The element after which you want to insert the node");
scanf("%d",
&key);
temp=head;
do
{
if(temp
→data==key)
{
New
→next=temp
→next;
temp
→next=New;
return;
}
else
temp-temp→next;
}while(temp!=
NULL);
}
}
node*
get_prev(node *head, int val)
{
node
*temp, *prev;
int
flag;
temp
= head;
if
(temp==NULL)
return
NULL;
flag
= FALSE;
prev
= NULL;
while
(temp != NULL && !flag)
{
if
(temp→data != val)
{
prev
=temp;
temp
= temp →next;
}
else
flag
= TRUE;
}
if
(flag )/*if flag is true*/
return
prev;
else
return
NULL;
}
/*
The
dele function
Input:Address
of the starting node of the list
Output:deletes
the desired element from the list
Parameter
Passing Method: call by value
Calls
search(), get_prev()
*/
void
dele(node **head)
{
node
*temp, *prev;
int
key;
temp
= *head;
if
(temp == NULL)
{
printf("\nThe
list is empty\n");
getch();
clrscr();
return;
}
clrscr();
printf("\nEnter
the Element you want to delete: ");
scanf("%d",
&key);
temp=search(*head,key);
if
(temp != NULL)
{
prev
=get_prev(*head,key);
if
(prev != NULL)
{
prev
→ next = temp →next;
free
(temp);
}
Else
{
*head
= temp →next;
free(temp);
}
printf("\nThe
Element is deleted\n");
getch();
clrscr();
}
}
Output
Program
to Perform Various operations on Linked List
1.Create
2.Display
3.Search
for an item
4.Insert
an element in a list
5.Delete
an element from list
6.
Quit
Enter
Your Choice (1-6) 1
Enter
the Element :10
Do
you Want to enter more elements?(y/n)y
Enter
the Element :20
Do
you Want to enter more elements?(y/n)y
Enter the Element :30
Do
you Want to enter more elements? (y/n)y
Enter
the Element :40
Do
you Want to enter more elements?(y/n)y
Enter
the Element :50
Do
you Want to enter more elements? (y/n)n
The
Singly Linked List is created
Program
to Perform Various operations on Linked List
1.Create
2.Display
3.Search
for an item
4.Insert
an element in a list
5.Delete
an element from list
6.
Quit
Enter
Your Choice (1-6) 2
10
→
20 → 30 →
40 →
50 → NULL
Program
to Perform Various operations on Linked List
1.Create
2.
Display
3.Search
for an item
4.Insert
an element in a list
5.Delete
an element from list
6.
Quit
Enter
Your Choice (1-6) 3
Enter
the element you want to search 40
The
Element is present in the list
Program
to Perform Various operations on Linked List
1.Create
2.Display
3.Search
for an item
4.Insert
an element in a list
5.Delete
an element from list
6. Quit
Enter
Your Choice (1-6) 4
1.
Insert a node as a head node
2.
Insert a node as a last node
3.
Insert a node at intermediate position in the linked list
Enter
the your choice for insertion of node 1
Enter
The element which you want to insert 9
Program
to Perform Various operations on Linked List
1.Create
2.Display
3.Search
for an item
4.Insert
an element in a list oil or
5.Delete
an element from list
6. Quit
Enter
Your Choice (1-6) 2
9
→
10 →20
→ 30 →
40 →
50 →
NULL
Program
to Perform Various operations on Linked List
1.Create
2.Display
3.Search
for an item
4.Insert
an element in a list
5.Delete
an element from list
6. Quit
Enter
Your Choice (1-6) 4
1.
Insert a node as a head node
2. Insert a node as a last node
3.
Insert a node at intermediate position in the linked list
Enter
the your choice for insertion of node 2
Enter
The element which you want to insert 60
Program
to Perform Various operations on Linked List
1.Create
2.Display
3.Search
for an item
4.Insert
an element in a list
5.Delete
an element from list
6.
Quit
Enter
Your Choice (1-6) 2
9
→
10 →20 → 30 → 40 → 50 → 60 → NULL
Program
to Perform Various operations on Linked List
1.Create
2.Display
3.Search
for an item
4.Insert
an element in a list
5.Delete
an element from list
6. Quit
Enter
Your Choice (1-6) 4
1.
Insert a node as a head node
2.
Insert a node as a last node
3.
Insert a node at intermediate position in the linked list
Enter
the your choice for insertion of node 3
Enter
The element which you want to insert 31
Enter
The element after which you want to insert the node 30
Program to Perform Various operations on
Linked List
1.Create
2.Display
3.Search
for an item
4.Insert
an element in a list
5.Delete
an element from list
6. Quit
Enter
Your Choice (1-6) 2
9
→ 10 → 20 → 30 → 31 → 40 → 50 → 60 → NULL
Program
to Perform Various operations on Linked List
1.Create
2.Display
3.Search
for an item
4.Insert
an element in a list
5.Delete
an element from list
6. Quit
Enter
Your Choice (1-6) 5
Enter
the Element you want to delete: 40
The
Element is present in the list
The Element is deleted
Program
to Perform Various operations on Linked List
1.Create
2.Display
3.Search
for an item
4.Insert
an element in a list
5.Delete
an element from list
6.
Quit
Enter
Your Choice (1-6) 2
9 → 10 → 20 → 30 → 31 →
50 → 60 → NULL
4 More Programs on
Linked List
In
this section we will discuss various operations that can be performed on the
linked list. For the sake of convenience we will discuss only functions
performing these operations assuming that the list is already created. The create() and display() functions will be common to all these operations.
Ex.
3.5.2: Counting the nodes of linked list.
Sol. :
void
count()
{
node
*temp;
int
c=0;
temp=head;
if(temp==
NULL)
{
printf("\n
The list is empty");
return;
}
while(temp!=
NULL)/*visiting each node */
{
c=c+1;/*c
is for counting the node*/
temp-temp →next;
}
printf("\nThe
Total number of nodes are: %d",c);
getch();
}
Ex.
3.5.3: Concatenation of two linked list
Sol. :
void
concat(node *head1,node *head2)
{
node
*temp1,*temp2;
temp1=head1;
temp2=head2;
while(temp1→next!=
NULL)
temp1=temp1→next;/*searching
end of first list*/
temp1→next=temp2;/*
attaching head of the second list*/
printf("\n
The concatenated list is ...\n");
temp1=head1;
while(temp1!=
NULL)
{
/*printing the concatenated list*/
printf("%d",temp1→Data);
temp1=temp1→next;
}
}
Ex.
3.5.4 Algorithm to copy one singly list to another
Sol. :
void
copy(node *head1,node *head2)
{
node
*temp1,*temp2;
temp1=head1;/*first
non empty linked list*/
head2=(node
*)malloc(sizeof(node));
temp2=head2;/*
second empty linked list*/
while(temp1!=
NULL)/*while not end of first linked list*/
{
temp2
→data=temp1→data;/*copy
the content to other node*/
temp2 →next = (node
*)malloc(sizeof(node));
temp2=temp2
→next;/*
moving one node ahead */
temp1=temp1 →next;
}
temp2=NULL;/*set
the next pointer of last node of second list to NULL*/ printf("\n The list
is copied \n");
while(head2→next!=
NULL)
{
/*printing
the second list i.e. copied list*/
printf("%d",head2
→data);
head2-head2
→next;
}
}
Ex.
3.5.5 Recursive routine to erase a linked list (delete all node from the linked
list)
Sol.:
struct
node *list_free(struct node *temp)
{
if(temp
→next!=
NULL)
{
temp1=temp→next;/*temp1
is declared globally*/
}
temp→next=NULL;
free(temp);
list_free(temp1);/*recursive
call*/
}
temp=NULL;
return
temp;
}
Ex.
3.5.6: Write a routine to merge two sorted linked lists. AU
: Dec.-15 Marks 8
Sol.
Consider two linked lists
node
*merge(node *temp1,node *temp2)
{
node
*prev_node1,*next_node2, *head;
if(temp1==
NULL)
{
temp1=temp2;
head=temp2;
}
if(temp1→data<temp2→data)
head=temp1;
else
head=temp2;
while(temp1!=
NULL && temp2!= NULL)
{
/*while data of 1st list is smaller then traverse*/ while((temp1→data<temp2→data)
&& (temp1!= NULL))
{
prev_node1=temp1;
/* store prev node of Sl11 */
temp1=temp1→next;
}
if(temp1==
NULL)
break;
/*when
temp1's data>temp1 it will come out of while loop so adjust links with
temp1's prev node*/
prev_node1→next=temp2;
next_node2=temp2→next;
/* store next node of Sl12*/
temp2→next=temp1;
temp1=temp2;
temp2=next_node2;
}
if(temp1==NULL&&temp2!=
NULL) /* attach rem nodes of S112*/
{
while(temp2!=
NULL)
{
prev_node1→next=temp2;
prev_node1=temp2;
temp2=temp2→next;
}
}
return
head;
}
Ex.
3.5.7: Returning the position of an element X in a list L
Sol.
The routine is as given below -
Return_position(node
*head,int key)
{
/*
head represents the starting node.of the List*/
/*
key represents the element X in the list*/
int
count=0;
node
*temp;
temp=head;
while(temp→data!=key)&&(temp!=
NULL)
{
temp-temp→next;
count=count+1;
}
if(temp→data==key)
return
count;
else
if(temp== NULL)
return
-1; /* -1 indicates that the element X is not presentin the list*/
}
Ex.
3.5.8 Write a C function to display the sum of all the elements in a singly
linked list.
Sol. :
void
sum(node *head)
{
node
*temp;
int
s=0;
temp=head;
while(temp!=
NULL)
{
s=s+temp→data;
temp-temp→next;
}
printf("%d",s);
}
Ex.
3.5.9: Assume a singly linked list where each node contains student details
like name, rollno and percentage of marks. Write a "C" function
COUNTO to traverse the linked list and count how many students have obtained
more than 60 %.
Sol.
The data structure can be -
struct
student
{
char
*name;
int
roll;
float
marks;
struct
student *next;
};
The
COUNT function can be written as -
void
COUNT(struct student *temp)
{
int
count=0;
while(temp!=
NULL)
{
if(temp→marks>60)
count++;
temp-temp→next;
}
printf("\n\n
%d students have obtained more than 60 Percentage", count);
}
Ex.
3.5.10 : Write a C program to create a singly linked list and split it at the
middle. And make the second half as the first and vice versa, display the final
list.
Sol. :
typedef
struct node
{
int
data;
struct
node *next;
}node;
void
main()
{
node*head=NULL,*p,
*q;
int
n,i,x;
printf("\nEnter
number of nodes:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("\nEnter
element:");
scanf("%d",
&x);
p=(node*)malloc(size
of(node));
p→data=x;
p→next=NULL;
if(head
== NULL)
head=q=p;
else
{
q→next=p;
q=p;
}
}
p=q=head;
while(q
next!= NULL)
{
p=p→next;
q=q→next;
if(q→next!=
NULL)
q-q→next;
}
q→next-head;
head=p→next;
p→next=NULL:
for(p=head;p!=
NULL;p=p→next)
printf("\n%d",p-data);
}
Ex.
3.5.11: Write a function that removes all duplicate elements from a linear
singly linked list.
Sol. :
void
dupdelete(node *head)
{
node
*p,*q,*r;
p=head;
q=p→next;
while(q!=
NULL)
{
if(p→data!-q→data)
{
p=p→next;
q=q→next;
else
if(p→data==q-data)
{
p→next-q→next;
r=q;
q=q→next;
free(r);
}
return(head);
}
}
Ex.
3.5.12: Suppose a linked list consists of numerical values. Write a function
for finding the maximum element of the list and the product of all the numbers
in the list.
Sol.
i) To find the maximum element in the
linked list :
void maxElement(node *root)
{
node
*temp;
int
Maxval;
temp=root;
Maxval-temp→data;
while(temp!=
NULL)
{.
if(temp→data>Maxval)
{
Maxval-temp→data;
}
temp-temp→next;
}
printf("\n
Maximum Value is: %d", Maxval);
}
ii) To find the product of all numbers in the
linked list :
void
Product(node *root)
{
node
*temp;
int
p=1;
temp=root;
while(temp!=
NULL)
{
p=p*temp→data;
temp-temp→next;
}
printf("\n
Product of all the elements: %d",p);
}
Review Questions
1. Write C code for
singly liked list with insert, delete, display operations using structure
pointer.D
AU: May-16, Marks 16
2. What are the ways
to insert a note in linked list? Write an algorithm for inserting a node before
a given node in a linked list.AU: Dec.-18, Marks 6
3. Explain the
insertion operation linked list. How nodes are inserted after a specified node? AU: Dec.-19, Marks
13
C Programming and Data Structures: Unit III: a. Linear Data Structures - List : Tag: : Definition, Operation, Structure, Types, Example C programs | Linear Data Structures - Linked List
C Programming and Data Structures
CS3353 3rd Semester EEE, ECE Dept | 2021 Regulation | 3rd Semester EEE Dept 2021 Regulation