Here's the thing -- I (and a great many people I've worked with, interviewed, and was interviewed by) don't believe things like reversing a linked list are facts. They're basic skills that are either present or absent.
If you aren't able to do such basic things correctly on the spot, I simply can't trust you to check in complex/highly concurrent/etc code that works. As an IC developer I don't want to deal with your code or clean up your mistakes. As a manager, I can't trust you to write code unsupervised.
This quote in particular would be a massive red flag and probably the end of an interview:
"it is more appropriate that I understand how it should be used, it's pro's and con's and all it's supporting functions". In most companies, what's being sought is not someone who can just use the tools as appropriate. It's someone who can develop new tools and solve problems for which there isn't a pre-canned answer available. If you don't know how to solve the problems for which trivial answers exist, how can anyone expect you to be able to reason through truly novel and difficult problems.
The sort of attitude you're espousing is perfectly fine for large ERP/custom corporate app/corporate website/etc programming work. It's just not what people in the valley are doing.
I understand what you're saying but feel we're comparing different things. Yes, in an interview saying the thing you quoted would obviously be a red flag, and something I would never say. I understand the need in interviews to impress using your problem solving skills.
However, I believe that in your day to day job as a programmer, that quote is more appropriate - that you understand how particular data structures should be used rather than it's inner workings.
In this case, if we assume that the reason you're being interviewed is so you can do well at the day to day stuff, then my quote makes more sense.
I get you though; you want someone who can solve many new problems but it highly unreasonable to put a programmer in an unrealistic situation like an interview and expect them to perform just as well as they would on the job.
Unfortunately I have no answer on how to improve the interview process but it still bothers me that a better way hasn't been found.
Not many people even use linked lists anymore anyways, unless they are programming low-level things and even then it is often more efficient to use a growable array, something like List<T> in .net or vector in C++.
Reversing a linked list is not about how linked lists work. It is a very simple question which verifies that a person knows what the pointers are and how to use them, can write simple loops which manipulate pointers and can handle simple things such as 1 element lists, 0 element lists etc.
If you aren't able to do such basic things correctly on the spot, I simply can't trust you to check in complex/highly concurrent/etc code that works. As an IC developer I don't want to deal with your code or clean up your mistakes. As a manager, I can't trust you to write code unsupervised.
This quote in particular would be a massive red flag and probably the end of an interview: "it is more appropriate that I understand how it should be used, it's pro's and con's and all it's supporting functions". In most companies, what's being sought is not someone who can just use the tools as appropriate. It's someone who can develop new tools and solve problems for which there isn't a pre-canned answer available. If you don't know how to solve the problems for which trivial answers exist, how can anyone expect you to be able to reason through truly novel and difficult problems.
The sort of attitude you're espousing is perfectly fine for large ERP/custom corporate app/corporate website/etc programming work. It's just not what people in the valley are doing.