Sunday, 5 October 2025

Linked list 4


4a
#include 
#include 

struct Node {
    int data;
    struct Node* next;
};

struct Node* createNode(int data) {
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    if (newNode == NULL) return NULL;
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

void insertEnd(struct Node** head, int data) {
    struct Node* newNode = createNode(data);
    if (newNode == NULL) return;
    if (*head == NULL) {
        *head = newNode;
        return;
    }
    struct Node* last = *head;
    while (last->next != NULL) {
        last = last->next;
    }
    last->next = newNode;
}

void traverseReverse(struct Node* head) {
    if (head == NULL) return;
    traverseReverse(head->next);
    printf("%d ", head->data);
}

void traverseList(struct Node* head) {
    struct Node* current = head;
    if (head == NULL) {
        printf("List Empty.\n");
        return;
    }
    printf("List: ");
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");
}

int main() {
    struct Node* head = NULL;

    insertEnd(&head, 10);
    insertEnd(&head, 20);
    insertEnd(&head, 30);
    insertEnd(&head, 40);

    traverseList(head);

    printf("Reverse Traversal: ");
    traverseReverse(head);
    printf("\n");

    return 0;
}
  
4b
#include 
#include 

struct Node {
    int data;
    struct Node* next;
};

struct Node* createNode(int data) {
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    if (newNode == NULL) return NULL;
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

void insertEnd(struct Node** head, int data) {
    struct Node* newNode = createNode(data);
    if (newNode == NULL) return;
    if (*head == NULL) {
        *head = newNode;
        return;
    }
    struct Node* last = *head;
    while (last->next != NULL) {
        last = last->next;
    }
    last->next = newNode;
}

void traverseList(struct Node* head, const char* name) {
    struct Node* current = head;
    printf("%s: ", name);
    if (head == NULL) {
        printf("Empty.\n");
        return;
    }
    while (current != NULL) {
        printf("%d -> ", current->data);
        current = current->next;
    }
    printf("NULL\n");
}

void mergeLists(struct Node* head1, struct Node* head2) {
    if (head1 == NULL) return;
    if (head2 == NULL) return;

    struct Node* current = head1;
    while (current->next != NULL) {
        current = current->next;
    }
    current->next = head2;
}

int main() {
    struct Node* list1 = NULL;
    struct Node* list2 = NULL;

    insertEnd(&list1, 10);
    insertEnd(&list1, 20);

    insertEnd(&list2, 100);
    insertEnd(&list2, 200);
    insertEnd(&list2, 300);

    traverseList(list1, "List 1");
    traverseList(list2, "List 2");

    mergeLists(list1, list2);
    
    printf("\nAfter Merging:\n");
    traverseList(list1, "Merged List");

    return 0;
}

No comments:

Post a Comment