finished lab7.
In order to mimic the std behavior, the return value of end() is iterator of
tail_. whenever iterator-- is called, the first thing to check is whether
the next element is NULL, if it is, then means it is a tail pointer, so set
next_ of tail_ to itself, return tail_pointer again. next time, when it is called decrement again, it will pass the if check, then do the normal decreasement.