It comes down to how lists and are implemented ++. You can think of implementing lists like
data List a = Empty | Cons a (List a)
[] Empty : Cons. Haskell. O(n), n . , , , , , , , .
, . a, b, c d n1, n2, n3 n4 ,
((a ++ b) ++ c) ++ d
a, a ++ b, x, n1, a n1 .
(x ++ c) ++ d
x, x ++ c, y n1 + n2 ( a b).
y ++ d
y , , n1 + n2 + n3, n1 + (n1 + n2) + (n1 + n2 + n3) = 3n1 + 2n2 + n3.
a ++ (b ++ (c ++ d))
, c ++ d -> x n3,
a ++ (b ++ x)
b ++ x -> y n2 ,
a ++ y
, , n1 n3 + n2 + n1, , 3n1 + 2n2 + n3.