Your code can be simplified to
,[[<]<+>>[>],]<[<]
( <<+>> is probably the result of using an online compiler that forgets cell 255)
and repeat to perform the output operation:
>.[[<]<->>[>]<.>]<[<]
If you want to use only empty cells in your path, you can do it. But you will need to set your own protocol to determine the next cell, for example, save each data cell with the next cell, indicating the distance to the next, as:
[..., 104, 5, x, x, x, x, 108, 3, x, x, 102, 2...] [..., 104 , 5 , x, x, x, x, 108 , 3 , x, x, 102 , 2 ...] data pointer data pointer data pointer
when x is some arbitrary value other than zero (otherwise you would use it). This implementation would be relative - a linked list, but note that it will be space and code more expensive .
Zeroing the cells , or, as you call it, cleaning them, you can do the same as you did [<] using [-] . this will reduce the value of the cell until it reaches 0, and then fails. You can iterate the line down when you are at the end and go back by clearing each cell until you hit the beginning ( 0 or another reserved number that you put there).