This answer assumes that the list must ALWAYS remain singly-linked:
You only need a pointer to the first element and a pointer to the current element.
When you iterate forward, increment some counter to know how many times you've iterated. (Insertions MAY invalidate iterators!). Let's call this variable count
Now, if you want to iterate backwards k
values from the current element, you know that you need to iterate FORWARDS from the first element count - k
times.
EDIT: Of course we can improve efficiency; this answer is kind of a brute-force approach.
As one of the comments mentioned, you could push pointers into a stack as you iterate forward, and then pop them off as you iterate backwards.
If the list doesn't always have to remain singly-linked, then you can add backwards links as you iterate forwards, and then remove those links if you iterate backwards (although who knows why you'd want to).