When the particle is created is when you'd chuck it into its linked-list. You'd also have to check it whenever the particle moves. You could try to span it out... make it so that it does the calculations for 1/2 the particles one frame, and the other half on the next frame.
Also, is your program multi-threaded? If it is, then setup some threads specifically to update your particles (with my above example, you could have 2 threads, one for the 1st 1/2 of the particles, and one for the 2nd 1/2).
Linked-lists are EXTREMELY useful for sorting, you can alter/add/remove at will (with a "well setup one", of course), and you can break your sorting down into multiple smaller fragments, then you can pick and choose which ones you want to update, and when to update them, saving CPU/GPU cycles... only recently have I discovered the real power of linked-lists.
One rule that you should teach yourself (I learnt this one VERY quickly, even if only recently
fully discovered):
Every CPU & GPU cycle is prime real-estate. If your program uses a "full single core" (in other words, a dual core using 1 core, or 50% of the CPU, constantly... this means that the program DOESN'T use
true multithreading) or if it uses ALL of the CPU constantly... then you need to rework your timer/main-loop function.
By this I mean that the CPU should only ever max out any of your cores when it NEEDS to... not all the time. Most games don't apply this rule, as a result, they actually cost themselves CPU cycles (wasted on unoptimised timers and such) you should try it out... go run a game, then press control-alt-delete (open task manager) and track the CPU usage, you'll find out what I mean
EDIT: You should put your particles into the linked-list in a "pre-determined" drawing order... the ones you want draw first are in the list first.