#include <stdio.h> #include <stdlib.h> struct Node { int data; struct Node* next; }; struct Node* createNode(int data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; return newNode; } void printList(struct Node* head) { while (head) { printf("%d -> ", head->data); head = head->next; } printf("NULL\n"); } struct Node* removeNthFromEnd(struct Node* head, int n) { struct Node* dummy = createNode(0); dummy->next = head; struct Node *fast = dummy, *slow = dummy; for (int i = 0; i <= n; i++) { if (fast) fast = fast->next; } while (fast) { fast = fast->next; slow = slow->next; } struct Node* toDelete = slow->next; slow->next = toDelete->next; free(toDelete); struct Node* newHead = dummy->next; free(dummy); return newHead; } int main() { int n, value, pos; printf("Enter the number of nodes: "); scanf("%d", &n); struct Node *head = NULL, *tail = NULL; for (int i = 0; i < n; i++) { printf("Enter value for node %d: ", i + 1); scanf("%d", &value); struct Node* newNode = createNode(value); if (!head) { head = tail = newNode; } else { tail->next = newNode; tail = newNode; } } printf("Enter the position from the end to remove: "); scanf("%d", &pos); printf("Original List: "); printList(head); head = removeNthFromEnd(head, pos); printf("Updated List: "); printList(head); return 0; }