(ALGL1) Doubly Linked List
⛓️

(ALGL1) Doubly Linked List

struct Node { int data; struct Node* prev; struct Node* next; }; struct Node* createNode(int data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->prev = NULL; newNode->next = NULL; return newNode; } void insert(struct Node** head, int data, int position) { if (position <= 0) { printf("Invalid position\n"); return; } struct Node* newNode = createNode(data); struct Node* current = *head; if (position == 1 || current == NULL) { // Insert at front or if list is empty newNode->next = *head; if (*head != NULL) (*head)->prev = newNode; *head = newNode; } else { // Insert at position for (int i = 1; i < position - 1 && current->next != NULL; ++i) current = current->next; newNode->next = current->next; if (current->next != NULL) current->next->prev = newNode; current->next = newNode; newNode->prev = current; } } void delete(struct Node** head, int position) { if (*head == NULL || position <= 0) { printf("Invalid position\n"); return; } struct Node* current = *head; if (position == 1) { // Delete at front *head = current->next; if (*head != NULL) (*head)->prev = NULL; free(current); } else { // Delete at position for (int i = 1; i < position && current != NULL; ++i) current = current->next; if (current == NULL) { printf("Invalid position\n"); return; } if (current->prev != NULL) current->prev->next = current->next; else *head = current->next; if (current->next != NULL) current->next->prev = current->prev; free(current); } } void traverseList(struct Node* head) { printf("Doubly Linked List: "); while (head != NULL) { printf("%d ", head->data); head = head->next; } printf("\n"); } void main() { struct Node* head = NULL; insert(&head, 1, 1); insert(&head, 2, 2); insert(&head, 3, 3); traverseList(head); delete(&head, 2); delete(&head, 1); traverseList(head); }