Post Navigation

you can use wp-pagenavi and set the “number of pages to show” to 3
so you will get

[first] [6] [7] [8] [last]

now if you just need the names of the post then you could do something like this:

global $wp_query;
    //curent post
    $thePostID = $wp_query->post->ID;
    $my_query = new WP_Query(array('cat' => get_query_var('cat')));
    $count = 0;
    $curent_count = 0;
    if ($my_query->have_posts()){
        while  ($my_query->have_posts()){
            $no_repeat = array();
            $my_query->the_post();
            $count = $count + 1;
            if ($count = 1 ){// the first post in the category
                if (!in_array($post->ID,$no_repeat){
                    echo '<a href="'.the_permalink().'">'.the_title().'</a> ';
                    $no_repeat[] = $post->ID;
                }
            }
            if ($count = ($thePostID -1) ){//previous post
                if (!in_array($post->ID,$no_repeat){
                    echo '<a href="'.the_permalink().'">'.the_title().'</a> ';
                    $no_repeat[] = $post->ID;
                }
            }
            if ($count = $thePostID){//Current post
                if (!in_array($post->ID,$no_repeat){
                    echo '<a href="'.the_permalink().'">'.the_title().'</a> ';
                    $no_repeat[] = $post->ID;
                }
            }
            if ($count = ($thePostID + 1)){//Current post
                if (!in_array($post->ID,$no_repeat){
                    echo '<a href="'.the_permalink().'">'.the_title().'</a> ';
                    $no_repeat[] = $post->ID;
                }
            }
        }
    }

Hope this helps.