Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <memory>
- #include <string>
- template<typename T>
- struct Node
- {
- T value;
- std::shared_ptr<Node<T>> prev, next;
- };
- template <typename T>
- class dllist
- {
- public:
- dllist();
- void push_back(T value);
- T operator[](size_t index);
- size_t size() const;
- private:
- size_t _size = 0;
- std::shared_ptr<Node<T>> _first, _last;
- };
- template <typename T>
- dllist<T>::dllist()
- {
- }
- template <typename T>
- void dllist<T>::push_back(T value)
- {
- if (_size == 0)
- {
- _first = _last = std::make_shared<Node<T>>();
- _first->value = value;
- }
- else
- {
- _last->next = std::make_shared<Node<T>>();
- _last->next->prev = _last;
- _last = _last->next;
- _last->value = value;
- }
- _size++;
- }
- template <typename T>
- T dllist<T>::operator[](const size_t index)
- {
- if (index >= _size || index < 0)
- throw std::out_of_range("List index out of range.");
- std::shared_ptr<Node<T>> p;
- if (index < _size / 2)
- {
- p = _first;
- for (size_t i = 0; i < index; i++)
- {
- p = p->next;
- }
- }
- else
- {
- p = _last;
- for (int64_t i = _size - 1; i > index; i--)
- {
- p = p->prev;
- }
- }
- return p->value;
- }
- template <typename T>
- size_t dllist<T>::size() const
- {
- return _size;
- }
- int main()
- {
- try
- {
- dllist<char> word;
- std::string str;
- std::cin >> str;
- for (auto c : str)
- {
- word.push_back(c);
- }
- bool bEPalindrom = true;
- for (size_t i = 0; i < word.size() / 2; i++)
- {
- if (word[i] != word[word.size() - 1- i])
- {
- bEPalindrom = false;
- break;
- }
- }
- if (bEPalindrom)
- std::cout << "E palindrom." << std::endl;
- else
- std::cout << "Nu e palindrom." << std::endl;
- }
- catch (std::exception& e)
- {
- std::cout << e.what() << std::endl;
- }
- std::cout << "Press any key to quit...";
- std::getchar(); std::getchar();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement