Untitled
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...