Untitled

 avatar
unknown
c_cpp
2 years ago
2.1 kB
6
Indexable
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct _Node{
    char x;
    struct _Node *nxt;
    struct _Node *pre;
}Node;

void free_list(Node* node){
    Node* tmp;
    tmp = node;
    while(node != NULL){
        tmp = node;
        node = node->nxt;
        free(tmp);
    }
    return;
}

void delete_node(Node** head){
    Node* curNode;
    curNode = *head;
    if((*head)->pre == NULL) return;
    else if((*head)->nxt == NULL){
        *head = (*head)->pre;
        (*head)->nxt = NULL;
        free(curNode);
    }
    else{
        curNode->pre->nxt = curNode->nxt;
        curNode->nxt->pre = curNode->pre;
        (*head) = curNode->pre;
        free(curNode);
    }
    return;
}

void add_node(Node** head, char tmp){
    Node* new = (Node*)malloc(sizeof(Node)*1);
    Node* current = *head;
    new->x = tmp;
    new->nxt = current->nxt;
    new->pre = current;
    if(current->nxt != NULL){
        current->nxt->pre = new;
    }
    current->nxt = new;
    *head = new;
    return;
}

int main(){
    int t, n;
    scanf("%d", &t);
    for(int j = 0; j < t; j++){
        scanf("%d", &n);
        Node* head = (Node*)malloc(sizeof(Node));
        head->pre = NULL;
        head->nxt = NULL;
        head->x = '\0';
        for(int i = 0; i < n; i++){
            char tmp;
            scanf(" %c", &tmp);
            if(tmp == 'L'){
                if(head->pre != NULL) head = head->pre;
            }
            else if(tmp == 'R'){
                if(head->nxt != NULL) head = head->nxt;
            }
            else if(tmp == 'B'){
                delete_node(&head);
            }
            else{
                add_node(&head, tmp);
            }
        }
        
        while(head->pre != NULL){
            head = head->pre;
        }
        Node* scan = head;
        while(scan != NULL){
            printf("%c\n",scan->x);
            scan = scan->nxt;
        }
        printf("\n");
        free_list(head);
    }
}
Editor is loading...