Assuming
sym is 'c
ls is '(a b)
then your result would be constructed by
> (cons 'a (cons 'b (list 'c)))
'(a b c)
or the equivalent
> (cons 'a (cons 'b (cons 'c null)))
'(a b c)
So your procedure needs to cons each element until it has consumed ls, and then cons (list sym) or (cons sym null) at that point:
(define insert-3
(lambda (sym ls)
(cond
[(null? ls) (list sym)]
[else (cons (car ls) (insert-3 sym (cdr ls)))])))
such that
(insert-3 'c '(a b))
=> (cons 'a (insert-3 'c '(b)))
=> (cons 'a (cons 'b (insert-3 'c '())))
=> (cons 'a (cons 'b (list 'c)))
which will work for any length of list:
> (insert-3 'c '(a b))
'(a b c)
> (insert-3 'e '(a b c d))
'(a b c d e)