Linked List Programs Assignment
Linked List Programs Assignment
a) Implement a list library (singlylist.h) for a singly linked list with the above
six operations. Write a menu driven driver program to call the operations.
#include <stdio.h>
#include <stdlib.h>
void create();
void insert_at_beg();
void insert_at_end();
void insert_after_pos();
void del();
void search();
void display();
struct node
int info;
}*start=NULL;
int data,item,n1,pos,i,m;
int main()
int n;
setbuf(stdout, NULL);
printf("\n****Linked List*****\n");
After Position\n5.Delete\n6.Search\n7.Display\n8.Exit\n");
while(1)
scanf("%d",&n);
switch(n)
case 1:
create();
break;
case 2:
insert_at_beg();
break;
case 3:
insert_at_end();
break;
case 4:
insert_after_pos();
break;
case 5:
del();
break;
case 6:
search();
break;
case 7:
display();
break;
case 8:
exit(0);
default:
return 0;
void create()
scanf("%d",&data);
tmp=malloc(sizeof(struct node));
tmp->info=data;
tmp->link=NULL;
if(start==NULL)
start=tmp;
else
{ q=start;
while(q->link!=NULL)
q=q->link;
q->link=tmp;
void insert_at_beg()
scanf("%d",&data);
tmp=malloc(sizeof(struct node));
tmp->info=data;
tmp->link=start;
start=tmp;
display();
void insert_at_end()
{
struct node *tmp,*q;
scanf("%d",&data);
tmp=malloc(sizeof(struct node));
tmp->info=data;
tmp->link=NULL;
if(start==NULL)
start=tmp;
else
q=start;
while(q->link!=NULL)
q=q->link;
q->link=tmp;
display();
void insert_after_pos()
display();
int index;
tmp=malloc(sizeof(struct node));
printf("\nEnter the element to be inserted :\n");
scanf("%d",&data);
tmp->info=data;
tmp->link=NULL;
if(start==NULL)
start=tmp;
else
scanf("%d",&index);
q=start;
for(i=0;i<index;i++)
q = q->link;
if(q==NULL)
return;
tmp->link = q->link;
q->link = tmp;
display();
void del()
scanf("%d",&data);
tmp=start;
start=start->link;
free(tmp);
display();
return;
q=start;
if(q->link->info==data)
tmp=q->link;
q->link=tmp->link;
free(tmp);
display();
return;
q=q->link;
tmp=q->link;
q->link=NULL;
free(tmp);
display();
return;
void search()
int i=0;
scanf("%d",&item);
tmp=start;
while(tmp!=NULL)
if(tmp->info==item)
return;
tmp=tmp->link;
i++;
if(tmp->link==NULL)
void display()
if(start==NULL)
printf("List is empty!!\n");
else
q=start;
while(q!=NULL)
printf("%d\t",q->info);
q=q->link;
b) Implement a list library (singlylist.h) for a singly linked list. Create a linked
list, reverse it and display reversed linked list.
#include <stdio.h>
#include <stdlib.h>
struct node
}*stnode;
int main()
{
int n;
printf("------------------------------------------------------------------------------
\n");
scanf("%d", &n);
createNodeList(n);
displayList();
reverseDispList();
displayList();
return 0;
void createNodeList(int n)
int num, i;
else
scanf("%d", &num);
tmp = stnode;
break;
else
tmp = tmp->nextptr;
void reverseDispList()
if(stnode != NULL)
prevNode = stnode;
curNode = stnode->nextptr;
stnode = stnode->nextptr;
while(stnode != NULL)
{
stnode = stnode->nextptr;
curNode->nextptr = prevNode;
prevNode = curNode;
curNode = stnode;
void displayList()
if(stnode == NULL)
else
tmp = stnode;
while(tmp != NULL)
{
printf(" Data = %d\n", tmp->num); // prints the data of current node
a) Implement a list library (doublylist.h) for a doubly linked list with the
above four operations. Write a menu driven driver program to call the
operationsappend, insert, delete specific node, delete at position, search,
display.
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
};
void traverse(){
// List is empty
// just return
if (start == NULL) {
printf("\nList is empty\n");
return;
temp = start;
temp = temp->next;
void insertAtFront(){
int data;
scanf("%d", &data);
temp->data = data;
temp->prev = NULL;
// Pointer of temp will be assigned to start
temp->next = start;
start = temp;
void insertAtEnd(){
int data;
temp->prev = NULL;
temp->next = NULL;
scanf("%d", &data);
temp->data = data;
temp->next = NULL;
trav = start;
// If start is NULL
if (start == NULL) {
start = temp;
}
// Changes Links
else {
trav = trav->next;
temp->prev = trav;
trav->next = temp;
void insertAtPosition(){
newnode->next = NULL;
newnode->prev = NULL;
scanf("%d", &pos);
scanf("%d", &data);
newnode->data = data;
temp = start;
// If start==NULL,
if (start == NULL) {
start = newnode;
newnode->prev = NULL;
newnode->next = NULL;
// If position==1,
else if (pos == 1) {
newnode->next = start;
newnode->next->prev = newnode;
newnode->prev = NULL;
start = newnode;
// Change links
else {
temp = temp->next;
i++;
}
newnode->next = temp->next;
newnode->prev = temp;
temp->next = newnode;
temp->next->prev = newnode;
void deleteFirst(){
if (start == NULL)
printf("\nList is empty\n");
else {
temp = start;
start = start->next;
if (start != NULL)
start->prev = NULL;
free(temp);
void deleteEnd(){
if (start == NULL)
printf("\nList is empty\n");
temp = start;
temp = temp->next;
if (start->next == NULL)
start = NULL;
else {
temp->prev->next = NULL;
free(temp);
void deletePosition(){
int pos, i = 1;
temp = start;
// If DLL is empty
if (start == NULL)
printf("\nList is empty\n");
// Otherwise
else {
// Position to be deleted
scanf("%d", &pos);
if (pos == 1) {
position = start;
start = start->next;
if (start != NULL) {
start->prev = NULL;
free(position);
return;
i++;
// Change Links
position = temp->next;
if (position->next != NULL)
position->next->prev = temp;
temp->next = position->next;
// Free memory
free(position);
int main(){
int choice;
while (1) {
" starting\n");
" end\n");
printf("\t4 For insertion at "
"any position\n");
"first element\n");
"last element\n");
printf("\t8 To exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
traverse();
break;
case 2:
insertAtFront();
break;
case 3:
insertAtEnd();
break;
case 4:
insertAtPosition();
break;
case 5:
deleteFirst();
break;
case 6:
deleteEnd();
break;
case 7:
deletePosition();
break;
case 8:
exit(1);
break;
default:
continue;
return 0;
}
OR
#include <stdio.h>
#include <stdlib.h>
void create();
void insert_at_beg();
void insert_at_end();
void insert_after_pos();
void del();
void search();
void display();
struct node {
int info;
}*start=NULL;
int data,item,n1,pos,i,m;
int main()
int n;
setbuf(stdout, NULL);
printf("\n1.Create\n2.Insert at Beginning\n3.Insert at
scanf("%d",&n);
switch(n)
case 1:
create();
break;
case 2:
insert_at_beg();
break;
case 3:
insert_at_end();
break;
case 4:
insert_after_pos();
break;
case 5:
del();
break;
case 6:
display();
break;
case 7:
exit(0);
default:
return 0;
void create()
int data;
scanf("%d",&data);
tmp=malloc(sizeof(struct node));
tmp->info=data;
tmp->prev=NULL;
tmp->next=NULL;
if(start == NULL)
start = tmp;
display();
}
void insert_at_beg()
int data;
scanf("%d",&data);
tmp=malloc(sizeof(struct node));
tmp->info=data;
tmp->prev=NULL;
tmp->next=NULL;
if(start == NULL)
start = tmp;
else
start->prev = tmp;
tmp->next = start;
start = tmp;
display();
void insert_at_end()
{
int data;
scanf("%d",&data);
tmp=malloc(sizeof(struct node));
tmp->info=data;
tmp->prev=NULL;
tmp->next=NULL;
if(start == NULL)
start = tmp;
else
q=start;
while(q->next != NULL)
q->next = tmp;
tmp->prev = q;
display();
void insert_after_pos()
int data;
struct node *q,*tmp;
tmp=malloc(sizeof(struct node));
scanf("%d",&data);
tmp->info=data;
tmp->prev=NULL;
tmp->next=NULL;
if(start==NULL)
start=tmp;
else
scanf("%d",&pos);
q=start;
for(i=0;i<pos;i++)
q = q->next;
tmp->next = q->next;
if(q->next!=NULL)
{
q->next->prev=tmp;
q->next = tmp;
tmp->prev=q;
display();
void del()
scanf("%d",&data);
tmp=start;
if(tmp->next!=NULL)
start->next->prev=NULL;
start=start->next;
free(tmp);
display();
return;
}
q=start;
if(q->next->info==data)
prev=q->next->prev;
tmp=q->next;
q->next=tmp->next;
q->next->prev=prev;
free(tmp);
display();
return;
q=q->next;
tmp=q->next;
q->next=NULL;
free(tmp);
display();
return;
}
void display()
if(start==NULL)
printf("List is empty!!\n");
else
q=start;
while(q!=NULL)
printf("%d\t",q->info);
q=q->next;
#include <stdio.h>
#include <stdlib.h>
struct node {
int num;
}*stnode, *ennode;
void displayDlListRev();
int main()
int n;
stnode = NULL;
ennode = NULL;
printf("\n\n Doubly Linked List : Create and display a doubly linked list in
reverse order :\n");
printf("------------------------------------------------------------------------------------
\n");
scanf("%d", &n);
DlListcreation(n);
displayDlListRev();
return 0;
void DlListcreation(int n)
int i, num;
if(n >= 1)
if(stnode != NULL)
printf(" Input data for node 1 : "); // assigning data in the first node
scanf("%d", &num);
stnode->num = num;
stnode->preptr = NULL;
stnode->nextptr = NULL;
ennode = stnode;
if(fnNode != NULL)
scanf("%d", &num);
fnNode->num = num;
fnNode->nextptr = NULL;
else
break;
else
{
printf(" Memory can not be allocated.");
void displayDlListRev()
int n = 0;
if(ennode == NULL)
else
tmp = ennode;
while(tmp != NULL)
n++;