You are confusing contributing with leading the project.
Determining what code is written, what new features are developed, is leading the project. Not merging the contributions after ensuring the code is well written.
Linus leads from behind. After a feature is developed, he decides whether it will be allowed into the kernel. It's the same sort of decisionmaking process as in most development workflows, it just front-ends most of the work.
In most development processes, someone will decide "the product should do X", and they'll make some slides and pitch the ideas and the leaders will decide whether or not to pursue it. If they decide to pursue it then the developers will build it, debug it, test it, etc. The process is optimized around conserving a scarce resource, developer time.
In the Linux process, someone decides "Linux should do X", and so they build it, write all the code, debug it, test it... and then they'll send it to Linus, who decides whether or not to merge it. Same process, the difference is that the leader decides on the basis of fully-implemented code, rather than slideware. In the Linux model, developer time is not scarce and the process does not optimize for conserving it.