Untitled
unknown
c_cpp
3 years ago
2.1 kB
13
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...