# J - 22 char

Couldn't help it ;)

    (}.@}:#~0=2+/\2*@-/\])

Explanation follows:

- `2*@-/\]` - Over each pair of elements in the argument (each 2-item long infix) take the signum of the difference. This is equal to 1 if the difference is positive, 0 if zero, and -1 if negative.
- `2+/\` - Now over each of these new pairs, add the elements.
- `0=` - Test whether each result is equal to 0. This only happens if 1 is added to -1, i.e. if one side had a positive difference and the other had a negative.
- `}.@}:` - Cut off the first and the last element, because those can't possibly be extrema, and we lost information for them anyway by doing the pairs stuff above.
- `#~` - Use the true values on the right side to pick items from the list on the left side.

Usage:

       (}.@}:#~0=2+/\2*@-/\]) 1 2 1
    2
       (}.@}:#~0=2+/\2*@-/\]) 0 1 0 1 0
    1 0 1
       (}.@}:#~0=2+/\2*@-/\]) i.0   NB. i.0 is the empty list (empty result also)
    
       (}.@}:#~0=2+/\2*@-/\]) 0 1 2 0 1 0
    2 0 1