C Programming and Data Structures: Unit III: a. Linear Data Structures - List

Linked List

Definition, Operation, Structure, Types, Example C programs | Linear Data Structures

• 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.


 

1. 'C' Representation 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'.

 

2. Types of Linked List

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.

 

3. Linked List Implementation

• 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