BOJ 5397 C++
연결리스트 활용 풀이
직접 구현해서 품
#include <bits/stdc++.h>
#define ll long long
using namespace std;
class Node {
public:
Node* prev;
Node* next;
char data;
Node(char data = 0) : prev(nullptr), next(nullptr), data(data) {}
};
class Editor
{
public:
Node* head;
Node* cur;
Editor()
{
head = new Node();
cur = head;
}
void insert(char data)
{
Node* newNode = new Node(data);
if (head->next == NULL)
{
head->next = newNode;
newNode->prev = head;
cur = newNode;
}
else if (cur->next == NULL)
{
newNode->prev = cur;
cur->next = newNode;
cur = newNode;
}
else if (cur->next != NULL)
{
newNode->next = cur->next;
newNode->prev = cur;
cur->next->prev = newNode;
cur->next = newNode;
cur = newNode;
}
return;
}
void deleteNode()
{
if (cur != head)
{
cur->prev->next = cur->next;
if (cur->next != NULL)
{
cur->next->prev = cur->prev;
}
Node* temp = cur;
cur = cur->prev;
delete temp;
}
return;
}
void left()
{
if (cur->prev != NULL)
{
cur = cur->prev;
}
}
void right()
{
if (cur->next != NULL)
{
cur = cur->next;
}
}
void print()
{
Node* index = head->next;
while (index != NULL)
{
cout << index->data;
index = index->next;
}
cout << '\n';
return;
}
};
int main(void) {
ios::sync_with_stdio(NULL);
cin.tie(NULL);
int n; cin >> n;
for (int i = 0; i < n; i++)
{
Editor edit;
string s; cin >> s;
int len = s.length();
for (int i = 0; i < len; i++)
{
if (s[i] == '<')
edit.left();
else if (s[i] == '>')
edit.right();
else if (s[i] == '-')
edit.deleteNode();
else
edit.insert(s[i]);
}
edit.print();
}
return 0;
}
Leave a comment