refactor singly ll