You might find this advice useful; I managed to do exactly what you are trying to do. A year and a half ago, I was strictly an average student getting mostly B's and an occasional C, but very rarely an A. It wasn't that I wasn't working hard enough, I was studying a lot, but I wasn't studying effectively. Now I find I'm studying about the same amount of time, but my GPA has been rising over the last few semesters. Last semester, I received 2 A's and a B in some very challenging, time intensive lecture+lab classes. I was always pressed for time almost every second last semester, I doubt I would have been able to motivate myself to work that hard all semester long if I hadn't been getting A's and B's on all the tests and assignments.
I've posted this before, I hope it helps.
1. Do the assigned homework as soon as possible after it's assigned. Use notes/books/internet to their best advantage.
2. Any problems that you had trouble with (took more then a 30 mins to an hour to figure out or solve) do again right away. Just toss your previous work aside and try to do the problem again; if it takes you any more then half the time to solve it again (use book, notes, internet), you are probably lacking knowledge in some area, such as math or the material. If it's taking you more then an hour for a problem, go and see the professor or TA right away or move on to the next problem until you can meet with one of them. If all the problems are giving you trouble, again, go see your professor or TA and or move on to another subject until you can because you are obviously missing something vital and working on problems that you lack the skill or knowledge to solve is a waste of time. If you find that you have extra time left over after doing your other homework, by all means, go back and work on the problems that you couldn’t solve right away. This is an important time management skill that took me a long time to master. Don't waste too much time beating your head against something you don't understand (but don't give up after 10 mins either

), get help before you waste 5 to 8 hours of valuable study time. When you go to the professor or TA, be prepared to show the work you have already done and see of they will watch you actually try and work one out. I've picked up a lot of little algebra tricks that way.
3. Wait 2 or 3 days and do the homework again. This works great if you do it right before attempting a new batch of homework for the 1st time from the same class. It gets you motivated and gives you confidence that you are actually learning the material. This time, try and rely less on the book and other resources, but don’t waste too much time trying to remember a formula or derivation. Unless the work was very simple, it should take you about 1/3 of the time to do it the second time around.
4. If time permits, do the homework completely over a 3rd time. This 3rd time, it should only take you about 20 mins if it took you 2 hours or so the first time and you should hardly have to look at another resource.
5. Finally, reread the material from your notes and the book one last time before the exam to make sure you’re not missing anything. The stuff from the problems should just kind of leap out at you by this point and shouldn’t consume very much time.
What you are doing:
1. Building familiarity with the material itself.
2. Learning the thinking processes that are usually central to solving those kinds of problems without burdening yourself with a totally new problem. For example, it’s easy to know that you did something wrong, either the first time or second time. If you are doing the same problem over and getting a different result, you are doing something wrong and you can compare your original work with your new work to quickly find your mistake.
3. Building confidence in the material. If you can walk into a test knowing that you can solve every homework problem in 5 to 30 mins (depending on the material), you will be much less likely to be surprised by a problem on the test or horrified by the length of the test.
I've noticed that in the last year of using this technique that I've gone from getting 3.0 to 3.3's in my math/problem solving classes to 3.7's to 4.0's. Even when I see a problem I've never encountered before, I'm usually able to blaze through the other problems so quickly that I don't run out of time reasoning it out. In the past, the problems that were similar to the homework would take up so much time that I didn't have time to think about the couple problems that were really trying to test my understanding of the material. It meant I could pass, I just couldn’t do as well as I wanted.
BTW, I'm not spending more time studying then I did before, I'm just getting a lot more out of my time.
Also, as cyrusabdollahi said, study alone most of the time to learn and master the material. I usually lock myself in a small study room at the library for 5 to 6 hours at a time. Once I feel I've mastered, or almost mastered the material, that's when I start to seek out study groups, but by this time, I find I'm usually teaching rather then learning from them. I find that this also helps me tremendously. When I can stand there and answer just about any question they throw at me and I can help them find and fix their mistakes or explain a difficult concept to them, that's when I know I'm really ready for the exam.