Q:

Linear interpolation of elements in a list to generate new list

For a list of any given length, I want to generate another list from it adding elements which are mean of the consecutive elements, in between the elements, of the original list.
For example:
list = {a, b, c};
newlist = {a, (a+b)/2, b, (b+c)/2, c}

I have written this function which does the job but I need much more elegant solution:
intFunc[list_] := Module[{list1},
list1 = ConstantArray[0, 2*Length[list] - 1];
Table[list1[[2*i - 1]] = list[[i]], {i, 1, Length[list]}];
Table[list1[[2*i]] = (list[[i]] + list[[i + 1]])/2, {i, 1, Length[list] - 1}];
list1
];

A:

My take:
list = {a, b, c};
Riffle[list, MovingAverage[list, 2]]
(* {a, (a + b)/2, b, (b + c)/2, c} *)

Equivalently:
MovingAverage[Riffle[list, list], 2]

Finally, can be generalized to multiple points in between original data points. Equivalent to previous solutions (if using n=2):
intList[list_, n_] := MovingAverage[Flatten[Transpose[ConstantArray[list, n]], 1], n]

Demo (offsets in data include for clarity):
list = {1, 4, 9};
ListPlot[Evaluate @ (#/2 + intList[list, #] & /@ Range[5]), DataRange -> {1, 3}]

Re the comment by Markus Roellig: using ArrayResample like so gives the same results.
intList2[list_, n_] := ArrayResample[list, (Length[list] - 1)*n + 1]

A:

intFunc[list_]:=Interpolation[list, InterpolationOrder->1]@Range[1, Length@list, 1/2]

A:

For integer lists, this s/b nicely faster than others (interpolation and the two moving-average based solutions:
Riffle[#, Divide[Most@# + Rest@#, 2]] &

On real/symbolic, it is comparable to the moving-average based solutions. The interpolation based solution performs uniformly poorly on large lists regardless of type.

