1 minute read

연결리스트 활용 풀이

직접 구현해서 품

#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