Single post – display list of all posts + specific post

When the single post template is loaded, WordPress has already queried the database for that post. When you call query_posts('post_type=post&posts_per_page=1');, and then run the loop, this simply loads and outputs a single post, which by default will be the latest post. It also has the side-effect of overwriting the original main query.

You don’t need to, nor should you ever call query_posts in the template.

To load additional posts beside the single post you are currently viewing, use WP_Query, and leave the main query unaltered.

// load and display all posts
// setting post_type is unnecessary, it will default to post
$all_posts = new WP_Query( array( 'posts_per_page' => -1 ) );
while( $all_posts->have_posts() ):
    $all_posts->the_post();
    // your markup for all posts
endwhile;

// reset the global post variable
wp_reset_postdata();

// now output the single post
// no need for a query, the post data already exists
// in the global $wp_query
while( have_posts() ):
    the_post();
    // your markup for the single post
endwhile;