Untitled

 avatar
unknown
plain_text
7 days ago
1.7 kB
6
Indexable
#include <stdio.h>
#include <stdlib.h>

struct node {
    int val;
    struct node* next;
    struct node* prev;
};

struct node* create_node(int val) {
    struct node* newnode = (struct node*)malloc(sizeof(struct node));
    newnode->val = val;
    newnode->next = NULL;
    newnode->prev = NULL;
    return newnode;
}

void insert_at_head(struct node** head, struct node** tail, int val) {
    struct node* newnode = create_node(val);
    newnode->next = *head;
    newnode->prev = *tail;
    (*head)->prev = newnode;
    (*tail)->next = newnode;
    *head = newnode;
}

void insert_at_tail(struct node** head, struct node** tail, int val) {
    struct node* newnode = create_node(val);
    newnode->prev = *tail;
    (*tail)->next = newnode;
    newnode->next = *head;
    (*head)->prev = newnode;
    *tail = newnode;
}

void print(struct node* head, int size) {
    struct node* temp = head;
    int count = 0;
    while (count < size) {
        printf("%d\n", temp->val);
        temp = temp->next;
        count++;
    }
}

int main() {
    struct node* head = create_node(10);
    struct node* a = create_node(20);
    struct node* b = create_node(30);

    head->next = a;
    a->next = b;
    b->next = head;

    head->prev = b;
    a->prev = head;
    b->prev = a;

    int size = 3;

    insert_at_head(&head, &b, 100);
    size++;
    print(head, size);

    insert_at_tail(&head, &b, 200);
    printf("\n");
    size++;
    print(head, size);

    struct node* current = head;
    struct node* next_node;
    for (int i = 0; i < size; i++) {
        next_node = current->next;
        free(current);
        current = next_node;
    }

    return 0;
}
Leave a Comment