// // C Program for Implementation of Singly Linked List
#include <stdio.h>
#include <stdlib.h>
// Define the Node structure
struct Node {
int data;
struct Node* next;
};
// Function to create a new node
struct Node* createNode(int data) {
struct Node
* newNode
= (struct Node
*)malloc(sizeof(struct Node
)); newNode->data = data;
newNode->next = NULL;
return newNode;
}
// Function to insert a new element at the beginning of the singly linked list
void insertAtFirst(struct Node** head, int data) {
struct Node* newNode = createNode(data);
newNode->next = *head;
*head = newNode;
}
// Function to insert a new element at the end of the singly linked list
void insertAtEnd(struct Node** head, int data) {
struct Node* newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
return;
}
struct Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
// Function to insert a new element at a specific position in the singly linked list
void insertAtPosition(struct Node** head, int data, int position) {
struct Node* newNode = createNode(data);
if (position == 0) {
insertAtFirst(head,data);
return;
}
struct Node* temp = *head;
for (int i = 0; temp != NULL && i < position - 1; i++) {
temp = temp->next;
}
if (temp == NULL) {
printf("Position out of range\n"); return;
}
newNode->next = temp->next;
temp->next = newNode;
}
// Function to delete the first node of the singly linked list
void deleteFromFirst(struct Node** head) {
if (*head == NULL) {
return;
}
struct Node* temp = *head;
*head = temp->next;
}
// Function to delete the last node of the singly linked list
void deleteFromEnd(struct Node** head) {
if (*head == NULL) {
return;
}
struct Node* temp = *head;
if (temp->next == NULL) {
*head = NULL;
return;
}
while (temp->next->next != NULL) {
temp = temp->next;
}
temp->next = NULL;
}
// Function to delete a node at a specific position in the singly linked list
void deleteAtPosition(struct Node** head, int position) {
if (*head == NULL) {
return;
}
struct Node* temp = *head;
if (position == 0) {
deleteFromFirst(head);
return;
}
for (int i = 0; temp != NULL && i < position - 1; i++) {
temp = temp->next;
}
if (temp == NULL || temp->next == NULL) {
printf("Position out of range\n"); return;
}
struct Node* next = temp->next->next;
temp->next = next;
}
// Function to print the LinkedList
void print(struct Node* head) {
struct Node* temp = head;
while (temp != NULL) {
temp = temp->next;
}
}
// Driver Code
int main() {
struct Node* head = NULL;
insertAtFirst(&head, 10);
printf("Linked list after inserting the node:10 at the beginning \n"); print(head);
printf("Linked list after inserting the node:20 at the end \n"); insertAtEnd(&head, 20);
print(head);
printf("Linked list after inserting the node:5 at the end \n"); insertAtEnd(&head, 5);
print(head);
printf("Linked list after inserting the node:30 at the end \n"); insertAtEnd(&head, 30);
print(head);
printf("Linked list after inserting the node:15 at position 2 \n"); insertAtPosition(&head, 15, 2);
print(head);
printf("Linked list after deleting the first node: \n"); deleteFromFirst(&head);
print(head);
printf("Linked list after deleting the last node: \n"); deleteFromEnd(&head);
print(head);
printf("Linked list after deleting the node at position 1: \n"); deleteAtPosition(&head, 1);
print(head);
return 0;
}