#include <list>
#include <algorithm>
#include <iostream>
int main()
{
// Fill a doubly-linked list with characters.
std::string str = "racecar";
std::list<char> l;
for (char c : str)
l.emplace_back(c);
// Find the center of the list.
auto it = l.begin();
std::advance(it, l.size() / 2);
// Compare the first half of the list to the second half.
if (std::equal(l.begin(), it, l.rbegin()))
std::cout << str.c_str() << " is a palindrome." << std::endl;
else
std::cout << str.c_str() << " is not a palindrome." << std::endl;
return 0;
}
I2luY2x1ZGUgPGxpc3Q+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCmludCBtYWluKCkKewogICAgLy8gRmlsbCBhIGRvdWJseS1saW5rZWQgbGlzdCB3aXRoIGNoYXJhY3RlcnMuCiAgICBzdGQ6OnN0cmluZyBzdHIgPSAicmFjZWNhciI7CiAgICBzdGQ6Omxpc3Q8Y2hhcj4gbDsKICAgIGZvciAoY2hhciBjIDogc3RyKQogICAgICAgIGwuZW1wbGFjZV9iYWNrKGMpOwoKICAgIC8vIEZpbmQgdGhlIGNlbnRlciBvZiB0aGUgbGlzdC4KICAgIGF1dG8gaXQgPSBsLmJlZ2luKCk7CiAgICBzdGQ6OmFkdmFuY2UoaXQsIGwuc2l6ZSgpIC8gMik7CgogICAgLy8gQ29tcGFyZSB0aGUgZmlyc3QgaGFsZiBvZiB0aGUgbGlzdCB0byB0aGUgc2Vjb25kIGhhbGYuCiAgICBpZiAoc3RkOjplcXVhbChsLmJlZ2luKCksIGl0LCBsLnJiZWdpbigpKSkKICAgICAgICBzdGQ6OmNvdXQgPDwgc3RyLmNfc3RyKCkgPDwgIiBpcyBhIHBhbGluZHJvbWUuIiA8PCBzdGQ6OmVuZGw7CiAgICBlbHNlCiAgICAgICAgc3RkOjpjb3V0IDw8IHN0ci5jX3N0cigpIDw8ICIgaXMgbm90IGEgcGFsaW5kcm9tZS4iIDw8IHN0ZDo6ZW5kbDsKCiAgICByZXR1cm4gMDsKfQo=