You should be able to implement it without ++.
splitAt' :: Int -> [a] -> ([a], [a])
splitAt' 0 ys = ([], ys)
splitAt' n_ [] = ([], [])
splitAt' n (y:ys)
| n < 0 = ([], (y:ys))
| otherwise = ((y:a), b)
where (a, b) = splitAt' (n - 1) ys