If you accept the structure of the circular list when the last element of the list is deleted, the next element to be deleted is not the first in the rest of the list, but the second. Thus,
L = range(100)
st1=len(L)%2
st2=0
while len(L)>1:
del L[st2::2]
st2=(st1+st2)%2
st1=len(L)%2
print L
must be correct.
Result
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]
[3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, 63, 67, 71, 75, 79, 83, 87, 91, 95, 99]
[7, 15, 23, 31, 39, 47, 55, 63, 71, 79, 87, 95]
[7, 23, 39, 55, 71, 87]
[7, 39, 71]
[7, 71]
[71]