Brain-Flak, 122 bytes
(([{}]{()<({}[()]<({}<>)<>>)>}{})<(({}({}))([{}]{})<{({}()<<>({}<>)>)}{}>)>())<>({}<<>{({}[()]<({}<>)<>>)}{}>){<>({}<>)}{}
Works with all integers, 142138 bytes
(([{}]{()<({}[()]<({}<>)<>>)>}{})<(({}({}))[({}[{}]{})]<<{({}[()]<<><<>({}<>)>)}{}>)>())<>({}<<>{({}[()]<({}<>)<>>)}{}>)<>([]){({}[()]<({}<>)<>>)}<>
The difference here is that while the first uses
{<>({}<>)}{}
To pull all the items from the off stack onto the on stack this one has to use
<>({}){({}[()]<({}<>)<>>)}<>
The first one pulls until it hits a zero and then stops, so this will fail to produce the correct result when there is a zero before the first swapped value. The second checks the height and pulls that many times, thus it will work for any list.