Untitled

 avatar
unknown
c_cpp
2 years ago
1.8 kB
7
Indexable
//12668 - Text Editor - Linked List Version 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

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

void push(Node **cur, char data){
    Node *curNode = (*cur);
    Node *newNode = (Node*)malloc(sizeof(Node));

    newNode->data = data;
    newNode->pre = curNode;
    newNode->next = curNode->next;

    if(curNode->next != NULL) curNode->next->pre = newNode;
    curNode->next = newNode;
    (*cur) = newNode;

}

void backspace(Node **cur){
    Node *curNode = (*cur);

    if(curNode->pre == NULL) return;

    if(curNode->next ==NULL){
        (*cur) = curNode->pre;
        (*cur)->next = NULL;
        free(curNode);
    }
    else{
        curNode->next->pre = curNode->pre;
        curNode->pre->next = curNode->next;
        (*cur) = curNode->pre;
        free(curNode);
    }
}


int main(){
    int N,len;
    char data;
    scanf("%d", &N);
    
    while(N--){
        scanf("%d\n", &len);
        Node* head = (Node*)malloc(sizeof(Node));
        head->pre = NULL;
        head->next = NULL;
        Node *cur = head;

        while(len--){
            scanf("%c", &data);
            
            if(data == 'L'){
                if(cur->pre != NULL) cur = cur->pre;
            }
            else if(data == 'R'){
                if(cur->next != NULL) cur = cur->next;
            }
            else if(data =='B'){
                backspace(&cur);
            }
            else{
                push(&cur,data);
            }
        }

        cur = head->next; //???
        while(cur != NULL){
            printf("%c", cur->data);
            cur = cur->next;
        }
        printf("\n");
        free(head);
        free(cur);

    }
    
}

Editor is loading...