For example you can use an ordinary loop.
std::pair<int, int> p;
for ( std::string::size_type i = 0; i < line.size(); i++ )
{
if ( i & 1 == 0 )
{
p.first = line[i] - '0';
}
else
{
p.second = line[i] - '0';
poly[0].push_back( new Node { p.first, p.second } );
}
}
Only it is not clear why you defined the list as std::list<Node *>
instead of std::list<Node>
You could write simply
poly[0].push_back( { p.first, p.second } );