PGDCA : MCSL209 - Lab Program of Liked List

Academic Courses

| views

1. Creation & Deletion of Lists Using Pointers


1(a). Singly Linked List – Create & Delete an Element

#include #include struct node { int data; struct node *next; }; struct node *head = NULL; void create(int n) { struct node *newnode, *temp; for (int i = 0; i < n xss=removed>struct node*)malloc(sizeof(struct node)); printf("Enter data: "); scanf("%d", &newnode->data); newnode->next = NULL; if (head == NULL) head = temp = newnode; else { temp->next = newnode; temp = newnode; } } } void delete(int key) { struct node *temp = head, *prev = NULL; while (temp != NULL && temp->data != key) { prev = temp; temp = temp->next; } if (temp == NULL) { printf("Element not found\n"); return; } if (prev == NULL) head = temp->next; else prev->next = temp->next; free(temp); } void display() { struct node *temp = head; while (temp != NULL) { printf("%d -> ", temp->data); temp = temp->next; } printf("NULL\n"); } int main() { int n, key; printf("Enter number of nodes: "); scanf("%d", &n); create(n); display(); printf("Enter element to delete: "); scanf("%d", &key); delete(key); display(); return 0; }

1(b). Doubly Linked List – Create & Delete

#include #include struct node { int data; struct node *prev, *next; }; struct node *head = NULL; void create(int n) { struct node *newnode, *temp; for (int i = 0; i < n xss=removed>struct node*)malloc(sizeof(struct node)); scanf("%d", &newnode->data); newnode->next = newnode->prev = NULL; if (head == NULL) head = temp = newnode; else { temp->next = newnode; newnode->prev = temp; temp = newnode; } } } void delete(int key) { struct node *temp = head; while (temp && temp->data != key) temp = temp->next; if (!temp) return; if (temp->prev) temp->prev->next = temp->next; else head = temp->next; if (temp->next) temp->next->prev = temp->prev; free(temp); } void display() { struct node *temp = head; while (temp) { printf("%d <-> ", temp->data); temp = temp->next; } printf("NULL\n"); } int main() { int n, key; printf("Enter number of nodes: "); scanf("%d", &n); create(n); display(); printf("Enter element to delete: "); scanf("%d", &key); delete(key); display(); return 0; }

1(c). Circular Singly Linked List – Create & Delete

#include #include struct node { int data; struct node *next; }; struct node *tail = NULL; void create(int n) { struct node *newnode; for (int i = 0; i < n xss=removed>struct node*)malloc(sizeof(struct node)); scanf("%d", &newnode->data); if (tail == NULL) { tail = newnode; tail->next = tail; } else { newnode->next = tail->next; tail->next = newnode; tail = newnode; } } } void delete(int key) { struct node *curr = tail->next, *prev = tail; do { if (curr->data == key) { prev->next = curr->next; if (curr == tail) tail = prev; free(curr); return; } prev = curr; curr = curr->next; } while (curr != tail->next); } void display() { struct node *temp = tail->next; do { printf("%d -> ", temp->data); temp = temp->next; } while (temp != tail->next); printf("(Back to Head)\n"); } int main() { int n, key; printf("Enter number of nodes: "); scanf("%d", &n); create(n); display(); printf("Enter element to delete: "); scanf("%d", &key); delete(key); display(); return 0; }

2. Common Elements of Two Singly Linked Lists

#include #include struct node { int data; struct node *next; }; struct node* insert(struct node* head, int data) { struct node* newnode = malloc(sizeof(struct node)); newnode->data = data; newnode->next = head; return newnode; } void common(struct node* A, struct node* B) { struct node* p = A; while (p) { struct node* q = B; while (q) { if (p->data == q->data) { printf("%d ", p->data); break; } q = q->next; } p = p->next; } } int main() { struct node *A = NULL, *B = NULL; int n, x; printf("Enter elements of List A (-1 to stop): "); while (1) { scanf("%d", &x); if (x == -1) break; A = insert(A, x); } printf("Enter elements of List B (-1 to stop): "); while (1) { scanf("%d", &x); if (x == -1) break; B = insert(B, x); } printf("Common elements: "); common(A, B); return 0; }

3. Sort a Singly Linked List & Insert an Element

#include #include struct node { int data; struct node *next; }; struct node* insert(struct node* head, int data) { struct node* newnode = malloc(sizeof(struct node)); newnode->data = data; newnode->next = head; return newnode; } void sort(struct node* head) { struct node *i, *j; int temp; for (i = head; i != NULL; i = i->next) { for (j = i->next; j != NULL; j = j->next) { if (i->data > j->data) { temp = i->data; i->data = j->data; j->data = temp; } } } } struct node* insert_sorted(struct node* head, int data) { struct node* newnode = malloc(sizeof(struct node)); newnode->data = data; if (head == NULL || data < head->data) { newnode->next = head; return newnode; } struct node* temp = head; while (temp->next && temp->next->data < data xss=removed>next; newnode->next = temp->next; temp->next = newnode; return head; } void display(struct node* head) { while (head) { printf("%d -> ", head->data); head = head->next; } printf("NULL\n"); } int main() { struct node* head = NULL; int x; printf("Enter list elements (-1 to stop): "); while (1) { scanf("%d", &x); if (x == -1) break; head = insert(head, x); } sort(head); printf("Sorted List: "); display(head); printf("Enter element to insert: "); scanf("%d", &x); head = insert_sorted(head, x); printf("Updated List: "); display(head); return 0; }
Share this Post
About the Author

✍️ Satyendra Singh is a dedicated software educator and creator behind Quizer.in. With a passion for coding, learning, and teaching, he simplifies complex programming topics and builds engaging tools that make learning fun for everyone.

Comments

No comments yet — be the first to comment! 💬
Leave a Comment

Your email address will not be published. Required fields are marked *

Popular Competitive Exam Quizzes