You are on page 1of 3

#include<stdio.

h>
#include<stdlib.h>

struct Node
{
int data;
struct Node *next;
};
struct Node *header;

void add(struct Node **head, int k, int v)


{
struct Node *ptr = *header;
struct Node *temp = (struct Node*)malloc(sizeof(struct Node*));
temp->data = v;
temp->next = NULL;

if(k==0)
{
temp->next = *head;
*head = temp;
}

else
{
for (int i=0; i<k-1; i++)
{
ptr = ptr->next;
}
temp->next = ptr->next;
ptr->next = temp;
}
}

void delete(struct Node **header, int k)


{
struct Node *temp = *header;

if (k==0)
{
*header = (*header)->next;
free (temp);
}

else
{
for (int i=0; i<k-1; i++)
temp = temp->next;
struct Node *ptr= temp->next;
temp->next = ptr->next;
free(ptr);
}
}

void update(struct Node **header,int k, int v)


{
struct Node *temp = *head;
for (int i=0; i<k; i++)
{
temp = temp->next;
}
temp->data = v;
}

int maximum()
{
struct Node *ptr = head;
int max;
max = header->data;

while (ptr != NULL)


{
if (max < ptr->data)
{
max = ptr->data;
}
ptr = ptr->next;
}
return max;
}

void print_list(struct Node *head)


{
while (header != NULL)
{
printf("%d->", header->data);
header = header->next;
}
}

int main()
{
header = NULL;
int n,q,k,v,max;
scanf("%d", &n);
for (int i=0; i<n; i++)
{
scanf("%d", &q);
switch (q)
{
case 1:
{
scanf("%d%d", &k, &v);
add(&header, k, v);
break;
}
case 2:
{
scanf("%d", &k);
delete(&header, k);
break;
}
case 3:
{
scanf("%d%d", &k, &v);
update(&header, k, v);
break;
}
case 4:
{
max=maximum();
printf("%d\n", max);
break;
}
}
}
}

You might also like